从单选按钮选择数据源后如何更新数据表?
How to update datatable after selecting data source from radio button?
我正在准备一个闪亮的应用程序。我有几个数据框,其中我存储有关人口的数据,按年细分。因此,例如,table_2017
存储 2017 年的数据,table_2018
存储 2018 年的数据,等等。
我想在table中显示所有数据,并允许用户选择他感兴趣的年份。我以为我会准备一个单选按钮,这样用户就会select他感兴趣的年份。
我试图在按钮 id 中隐藏源 table 名称,然后将其传递给 datatable()
函数,不幸的是这种方法不起作用,因为它未被识别为数据框并且我收到消息:
'data' must be 2-dimensional (e.g. data frame or matrix).
因此我的问题是:从按钮收音机 selecting 数据源后如何更新数据table?也许有一些现成的工具(例如 updatemenus
for plotly)?
这是一个例子:
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)
这真的很简单,只需添加get(data))
问题是您的单选按钮中的 input$years
只是一个字符向量,DT::datatable
无法执行 table。使用 get()
,您可以访问 R 环境并评估数据帧,而不是 datatable
中的字符向量。
你的 table 输出是
output$table <- DT::renderDataTable({
data <- input$years
datatable(get(data))
})
顺便说一句,您应该在闪亮的应用程序之外执行所有静态 R 代码。将您的数据框移到服务器功能之外或 global.R 文件
我正在准备一个闪亮的应用程序。我有几个数据框,其中我存储有关人口的数据,按年细分。因此,例如,table_2017
存储 2017 年的数据,table_2018
存储 2018 年的数据,等等。
我想在table中显示所有数据,并允许用户选择他感兴趣的年份。我以为我会准备一个单选按钮,这样用户就会select他感兴趣的年份。
我试图在按钮 id 中隐藏源 table 名称,然后将其传递给 datatable()
函数,不幸的是这种方法不起作用,因为它未被识别为数据框并且我收到消息:
'data' must be 2-dimensional (e.g. data frame or matrix).
因此我的问题是:从按钮收音机 selecting 数据源后如何更新数据table?也许有一些现成的工具(例如 updatemenus
for plotly)?
这是一个例子:
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)
这真的很简单,只需添加get(data))
问题是您的单选按钮中的 input$years
只是一个字符向量,DT::datatable
无法执行 table。使用 get()
,您可以访问 R 环境并评估数据帧,而不是 datatable
中的字符向量。
你的 table 输出是
output$table <- DT::renderDataTable({
data <- input$years
datatable(get(data))
})
顺便说一句,您应该在闪亮的应用程序之外执行所有静态 R 代码。将您的数据框移到服务器功能之外或 global.R 文件