library(shiny) library(rhandsontable) DF<-as.data.frame(matrix(nrow=1, ncol=5)) colnames(DF)<-c("ID","Concentració Vector (ng/ul)","Longitud Vector (bp)","Concentració Insert (ng/ul)","Longitud Insert (bp)") DF[1,]<-rep("",5) ui <- fluidPage( # Application title titlePanel("Lligacions"), # Sidebar with a slider input for number of bins sidebarLayout( sidebarPanel( sliderInput("ratio", "Ratio Insert:Vector :", min = 1, max = 20, value = 10), sliderInput("minim", "Volum mínim:", min = 0.2, max = 1.25, value = 0.5, step = 0.1), sliderInput("voltotal", "Volum Total (V vector+V insert):", min = 1.5, max = 2.5, value = 2, step = 0.5), width = 3), # Show a plot of the generated distribution mainPanel( rHandsontableOutput("hot"), tableOutput("results") ) ) ) # Define server logic required to draw a histogram server <- function(input, output) { values <- reactiveValues() ## Handsontable observe({ if (!is.null(input$hot)) { DF = hot_to_r(input$hot) } else { if (is.null(values[["DF"]])){ DF <- DF } else{ DF <- values[["DF"]] } } values[["DF"]] <- DF }) output$hot <- renderRHandsontable({ if (!is.null(DF)){ rhandsontable(DF, stretchH = "all", readOnly = F, useTypes = T) } }) output$results <- renderTable({ observe({values}) t<-values[["DF"]] t<-t[apply(t,1, function(x) any(is.na(x)|x=="") == F),] if (nrow(t) < 1){ t }else{ if (nrow(t) > 1){ t[2:5]<-as.data.frame(apply(t[2:5],2,as.numeric)) }else{ t[2:5]<-as.data.frame(t(apply(t[2:5],2,as.numeric))) } Vv<-( (input$voltotal*t$`Concentració Insert (ng/ul)`*t$`Longitud Vector (bp)`)/(t$`Concentració Vector (ng/ul)`*t$`Longitud Insert (bp)`*input$ratio) ) / (1+(t$`Concentració Insert (ng/ul)`*t$`Longitud Vector (bp)`)/(t$`Concentració Vector (ng/ul)`*t$`Longitud Insert (bp)`*input$ratio)) Vi<-input$voltotal-Vv t[,"Volum vector (ul)"]<-Vv t[,"Volum insert (ul)"]<-Vi t[,"Dilució vector"]<-1 t[,"Dilució insert"]<-1 Vv.log<-Vv < input$minim if (TRUE %in% Vv.log){ alt.conc.vect<-( (input$voltotal-input$minim)*t$`Concentració Insert (ng/ul)`*t$`Longitud Vector (bp)`)/ (input$minim*t$`Longitud Insert (bp)`*input$ratio) t$`Dilució vector`[Vv.log]<-(t$`Concentració Vector (ng/ul)`/alt.conc.vect)[Vv.log] t$`Volum vector (ul)`[Vv.log]<-input$minim t$`Volum insert (ul)`[Vv.log]<-(input$voltotal-input$minim) } Vi.log<-Vi < input$minim if (TRUE %in% Vi.log){ alt.conc.insert<-( (input$voltotal-input$minim)*t$`Concentració Vector (ng/ul)`*t$`Longitud Insert (bp)`*input$ratio)/ (input$minim*t$`Longitud Vector (bp)`) t$`Dilució insert`[Vi.log]<-(t$`Concentració Insert (ng/ul)`/alt.conc.insert)[Vi.log] t$`Volum insert (ul)`[Vi.log]<-input$minim t$`Volum vector (ul)`[Vi.log]<-(input$voltotal-input$minim) } t["Molècules Vector (fmol)"]<-t$`Volum vector (ul)`*t$`Concentració Vector (ng/ul)`*1000000/(t$`Longitud Vector (bp)`*660*t$`Dilució vector`) t } }) } # Run the application shinyApp(ui = ui, server = server)