我在准备一份闪亮的申请。我有几个数据框架,我在其中存储有关人口的数据,按年分列。例如,table_2017
存储2017年的数据,2018年的table_2018
数据等等。
我想在一个表中显示所有的数据,并允许用户选择他感兴趣的年份。我想我会准备一个单选按钮,这样用户就会选择他感兴趣的年份。
我试图将源表名隐藏在按钮id中,然后将其传递给datatable()
函数,不幸的是,该方法无法工作,因为它不能被识别为数据帧,因此我得到消息:
‘数据’必须是二维的(例如数据帧或矩阵)。
因此,我的问题是:如何在从按钮单选中选择数据源之后更新datatable?也许有一些现成的工具(例如,updatemenus
用于巧妙地)?
这就是一个例子:
library(shiny)
library(DT)
ui <- fluidPage(
radioButtons("years", "Choose year", inline = TRUE,
c("2017" = "table_2017",
"2018" = "table_2018",
"2019" = "table_2019")),
DT::dataTableOutput("table")
)
server <- function(input, output) {
a <- c("Region1","Region2","Region3","Region4")
b <- c(100, 200, 300, 400)
table_2017 <- data.frame(a,b)
names(table_2017) <- c('Name', 'Population')
c <- c("Region1","Region2","Region3","Region4")
d <- c(500, 600, 700, 800)
table_2018 <- data.frame(c,d)
names(table_2018) <- c('Name', 'Population')
e <- c("Region1","Region2","Region3","Region4")
f <- c(900, 1000, 1100, 1200)
table_2019 <- data.frame(e,f)
names(table_2019) <- c('Name', 'Population')
output$table <- DT::renderDataTable({
data <- input$years
datatable(data)
})
}
shinyApp(ui = ui, server = server)
发布于 2020-12-03 03:05:00
这很简单,只需添加get(data))
问题是单选按钮中的input$years
只是一个字符向量,不能由DT::datatable
执行。使用get()
,您可以访问R环境并计算数据,而不是datatable
中的字符向量。
然后,您的表输出将
output$table <- DT::renderDataTable({
data <- input$years
datatable(get(data))
})
顺便说一句,你应该在你闪亮的应用程序之外执行所有的静态R代码。将数据文件移出服务器功能或在global.R文件中
https://stackoverflow.com/questions/65124587
复制