我有一个闪亮的应用 我有两个数据框,它们创建了第三个数据框。我希望用户在此合并数据帧上执行各种操作。结果,该第三数据帧应该是反应性的。仅在按下“合并”按钮后填充数据框
我不明白的是,当应用启动时,如何创建一个不存在的反应式数据框。
到目前为止,我的代码:
fluidPage(tabsetPanel(type = "tabs",
tabPanel("Merged Dataset", tableOutput("table2"),
actionButton("Endomerge2",label = "Endomerge2"),
DT::dataTableOutput("pathTable"),
DT::dataTableOutput("endoTable"),
DT::dataTableOutput("mergedTable")
)
))
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的新数据表中?
答案 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)
}