如何在 Shiny reactive table 子集上执行基本 R 函数?

How to execute base R function on Shiny reactive table subset?

我正在尝试创建一个 Shiny/flexdashboard Markdown 文件,并将以下内容插入 R 代码块中。基本上,它使用两个输入对输入数据帧进行子集化——第二个输入取决于第一个:

output$Box1 = renderUI(selectInput('sector', 
                                 'Sector', 
                                 c(levels(test$Sector),"pick one"),
                                 "pick one") )

output$Box2 = renderUI(
if (is.null(input$sector) || input$sector == "pick one"){return() 
}else selectInput('FA', 
                  'Functional Area', 
                  c(levels(test$FA[which(test$Sector == input$sector)]),"pick one"),
                  "pick one"))

subdata1 = reactive(test[which(test$Sector == input$sector),])
subdata2 = reactive(subdata1()[which(subdata1()$FA == input$FA),])
renderDataTable({subdata2()},  options = list(dom = 'lpt'))

现在,这可以很好地对数据框(扇区,然后是 FA)进行子集化,并且子集化的数据框通过 renderDataTable.

在仪表板中可见

我想做的是在反应数据子集上执行类似 table 的操作,以在因子水平上创建应急 table:

 data1 <- reactive(table(subdata2()$UserCountry))

然后进一步使用这个新的table,例如:

renderDataTable({data1()},  options = list(dom = 'lpt'))

当我尝试这个时,新的 table 没有呈现。

有没有办法运行成功?

尝试

data1 <- reactive(as.data.frame(table(subdata2()$UserCountry)))

虽然 table() 返回的值像矩阵一样打印在控制台上,但它们有自己独特的 class (table)。它不由 renderDataTable() 处理,后者需要 data.framematrix.