| @ -0,0 +1,107 @@ | |||||
| library(shiny) | |||||
| library(rhandsontable) | |||||
| DF<-as.data.frame(matrix(nrow=1, ncol=5)) | |||||
| colnames(DF)<-c("name","conc.vector","bp.vector","conc.insert","bp.insert") | |||||
| 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:", | |||||
| 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({ | |||||
| print(DF) | |||||
| if (!is.null(DF)){ | |||||
| rhandsontable(DF, stretchH = "all", readOnly = F, useTypes = T) | |||||
| } | |||||
| }) | |||||
| output$results <- renderTable({ | |||||
| observe({values}) | |||||
| t<-values[["DF"]] | |||||
| print(t) | |||||
| 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$conc.insert*t$bp.vector)/(t$conc.vector*t$bp.insert*input$ratio) ) / (1+(t$conc.insert*t$bp.vector)/(t$conc.vector*t$bp.insert*input$ratio)) | |||||
| Vi<-input$voltotal-Vv | |||||
| t[,"vol.v"]<-Vv | |||||
| t[,"vol.i"]<-Vi | |||||
| t[,"dil.v"]<-1 | |||||
| t[,"dil.i"]<-1 | |||||
| Vv.log<-Vv < input$minim | |||||
| if (TRUE %in% Vv.log){ | |||||
| alt.conc.vector<-( (input$voltotal-input$minim)*t$conc.insert*t$bp.vector)/ (input$minim*t$bp.insert*input$ratio) | |||||
| t$dil.v[Vv.log]<-(t$conc.vector/alt.conc.vector)[Vv.log] | |||||
| t$vol.v[Vv.log]<-input$minim | |||||
| t$vol.i[Vv.log]<-(input$voltotal-input$minim) | |||||
| } | |||||
| Vi.log<-Vi < input$minim | |||||
| if (TRUE %in% Vi.log){ | |||||
| alt.conc.insert<-( (input$voltotal-input$minim)*t$conc.vector*t$bp.insert*input$ratio)/ (input$minim*t$bp.vector) | |||||
| t$dil.i[Vi.log]<-(t$conc.insert/alt.conc.insert)[Vi.log] | |||||
| t$vol.i[Vi.log]<-input$minim | |||||
| t$vol.v[Vi.log]<-(input$voltotal-input$minim) | |||||
| } | |||||
| t | |||||
| }) | |||||
| } | |||||
| # Run the application | |||||
| shinyApp(ui = ui, server = server) | |||||