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)
|