我需要帮助编写一个闪亮的应用程序,在进入每个相应的输入并单击动作按钮后将吐出单独的数据表。我让应用程序只是输出到数据表,但它将覆盖一个新的条目。我检查了R Shiny的参考部分,似乎我需要使用insertUI(),但我并不是很了解Shiny,以便弄明白。请帮忙。感谢。
1 | aaa | 40%
3 | ccc | 20%
我希望应用程序将此excel电子表格缩小,请注意每个表(提交)的列数不同。
答案 0 :(得分:1)
我不是100%清楚你是否想要在表格中添加新条目,或者你想要做其他事情,比如更换表格。您将在下面找到一个在表中添加新行的示例。我还添加了一个检查,以便不使用duplicated
函数输入重复项。
library(shiny)
library(rhandsontable)
#UI
ui <-shinyUI(fluidPage(
titlePanel('Drug Prep'),
sidebarPanel(textInput('expid','Experiment ID'),
textInput('nsc','NSC Number'),
textInput('solvent','Solvent'),
numericInput('stkcon','Stock Conc(mg/ml)',0),
numericInput('Repeat','Repeat',0),
textAreaInput('instruct','Instructions',height='50px'),
numericInput('amt','Amt to weigh(mg)',0),
numericInput('vehicle','Tot_vol of vehicle(ml)',0),
hr(),
numericInput('grp','Group',0),
numericInput('micedose','Mice Dose/vial',0),
numericInput('dose','Dose(mg/kg)',0),
numericInput('doseconc','Dose Concentration(mg/ml)',0),
numericInput('numvial','No. of Vials',0),
numericInput('volA','Vol of Vehicle_A(ml)',0),
numericInput('volB','Vol of Vehicle_B(ml)',0),
numericInput('volC','Vol of Vehicle_C(ml)',0),
br(),
actionButton('save','Save')
),
mainPanel(
textOutput('nsc'),
verbatimTextOutput('instruct'),
rHandsontableOutput("hot"),
br(),
rHandsontableOutput('hot2')),
hr()
)
)
#SERVER
server=function(input, output, session) {
output$instruct <- renderText({input$save
paste(isolate(input$nsc),isolate(input$instruct),sep='\n')
})
mydf <- reactiveValues()
observeEvent(input$save,{
data <- data.frame(ExpID=input$expid,NSC=input$nsc,Stock.conc=input$stkcon,
Repeats=input$Repeat,Amt=input$amt,vol=input$vehicle,
stringsAsFactors = F)
mydf$df <- rbind(mydf$df,data)
mydf$df <- mydf$df[!duplicated(mydf$df), ]
data2 <- data.frame(group=input$grp,No_of_mice_dosed=input$micedose,dose=input$dose,dose_conc=input$doseconc,
No_vial=input$numvial,vol_Vehicle_A=input$volA,vol_Vehicle_B=input$volB,vol_Vehicle_C=input$volC,
tot_vol=input$volA+input$volB+input$volC,stringsAsFactors = F)
mydf$df2 <- rbind(mydf$df2,data2)
mydf$df2 <- mydf$df2[!duplicated(mydf$df2), ]
})
output$hot <- renderRHandsontable({
if(is.null(mydf$df)){
return()
}
rhandsontable(mydf$df)
})
output$hot2 <- renderRHandsontable({
if(is.null(mydf$df2)){
return()
}
rhandsontable(mydf$df2)
})
}
shinyApp(ui = ui, server=server)