如何在Shiny反应表子集上执行基本R函数?

时间:2016-09-27 17:23:14

标签: r shiny r-markdown flexdashboard

我试图创建一个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之类的操作,以创建因子级别的列联表:

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

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

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

当我尝试这个时,新表格不会渲染。

有没有办法成功运行?

1 个答案:

答案 0 :(得分:1)

尝试

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

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