如何通过合并两个数据框来创建反应性数据框

时间:2019-04-21 19:11:27

标签: r shiny

我有一个闪亮的应用 我有两个数据框,它们创建了第三个数据框。我希望用户在此合并数据帧上执行各种操作。结果,该第三数据帧应该是反应性的。仅在按下“合并”按钮后填充数据框

我不明白的是,当应用启动时,如何创建一个不存在的反应式数据框。

到目前为止,我的代码:

ui.R

fluidPage(tabsetPanel(type = "tabs",
 tabPanel("Merged Dataset", tableOutput("table2"),
           actionButton("Endomerge2",label = "Endomerge2"),
           DT::dataTableOutput("pathTable"),
           DT::dataTableOutput("endoTable"),
           DT::dataTableOutput("mergedTable")
  )
))

server.R

library(shiny)

RV <- reactiveValues(data = DataToMerge1)
RV2 <- reactiveValues(data = DataToMerge2)
RV3<-reactiveVal(0)



server <- function(input, output) {      
  output$endotable = DT::renderDT({
    RV$data
  })
  output$pathTable = DT::renderDT({
    RV2$data
  })
  output$mergedTable = DT::renderDT({
    RV3$data
  })



 #Button to merge the dataframes on

    observeEvent(input$Endomerge2,{
    RV3$data<-Endomerge2(RV$data,"AcolumnToMerge",RV2$data,"AcolumnToMerge")
  },ignoreInit = TRUE)

}

此刻,我得到了关闭类型的错误不是子集化的,但我怀疑这只是隐藏了一个更大的错误。 那么,如何创建一个新的数据框并将其显示在Shiny的新数据表中?

1 个答案:

答案 0 :(得分:1)

reactiveVal()创建单个反应值,而不是列表,因此您不能添加名为data的列表项。试试这个:

RV <- reactiveValues(data = DataToMerge1)
RV2 <- reactiveValues(data = DataToMerge2)
RV3 <- reactiveValues(data = data.frame())



server <- function(input, output) {      
  output$endotable = DT::renderDT({
    RV$data
  })
  output$pathTable = DT::renderDT({
    RV2$data
  })
  output$mergedTable = DT::renderDT({
    RV3$data
  })



 #Button to merge the dataframes on

    observeEvent(input$Endomerge2,{
    RV3$data<-Endomerge2(RV$data,"AcolumnToMerge",RV2$data,"AcolumnToMerge")
  },ignoreInit = TRUE)

}