单击动作按钮后如何添加新的/单独的数据表

时间:2017-05-05 02:06:14

标签: datatable shiny rhandsontable action-button

我需要帮助编写一个闪亮的应用程序,在进入每个相应的输入并单击动作按钮后将吐出单独的数据表。我让应用程序只是输出到数据表,但它将覆盖一个新的条目。我检查了R Shiny的参考部分,似乎我需要使用insertUI(),但我并不是很了解Shiny,以便弄明白。请帮忙。感谢。

 1 | aaa | 40%
 3 | ccc | 20%

enter image description here

我希望应用程序将此excel电子表格缩小,请注意每个表(提交)的列数不同。

1 个答案:

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

http://localhost:8089/vis