R Shiny:如何将数据表添加到动态创建的选项卡
Posted
技术标签:
【中文标题】R Shiny:如何将数据表添加到动态创建的选项卡【英文标题】:R Shiny: How to add data tables to dynamically created tabs 【发布时间】:2017-01-09 14:35:38 【问题描述】:我目前正在尝试创建动态创建的数据表,每个表都有自己的选项卡。选项卡的数量由用户确定。我使用了this post 的代码作为框架。
我能够动态创建选项卡,但我不知道如何将数据表添加到选项卡。数据表也由用户输入确定。 因此,例如,在 ui.R 中,用户可以选择他们想要查看的数据集:
ui.R
library(shiny)
shinyUI(fluidPage(
titlePanel("Example"),
sidebarLayout(
sidebarPanel(
selectInput("decision", label = "Choose Dataset",
choices = list("mtcars" = "mtcars",
"iris" = "iris",
"precip" = "precip",
"quakes" = "quakes"),
selected = NULL, multiple = TRUE)
),
mainPanel(
uiOutput('mytabs')
)
)
))
服务器.R
library(shiny)
library(ggplot2)
shinyServer(function(input, output, session)
output$mytabs <- renderUI(
nTabs = length(input$decision)
myTabs = lapply(paste('dataset', 1:nTabs), tabPanel)
do.call(tabsetPanel, myTabs)
)
)
所以,我想把对应的数据集分别渲染到每个标签下的数据表中。
提前感谢您的所有帮助!
【问题讨论】:
【参考方案1】:要做你想做的事,你需要在动态生成tabPanel
的同时将dataTableOutput
添加到你的tabPanel
中,然后你需要动态生成对应的renderDataTable
。
在您的服务器中执行此操作:
library(DT) # need datatables package
server <- shinyServer(function(input, output, session)
output$mytabs <- renderUI(
nTabs = length(input$decision)
# create tabPanel with datatable in it
myTabs = lapply(seq_len(nTabs), function(i)
tabPanel(paste0("dataset_",i),
DT::dataTableOutput(paste0("datatable_",i))
)
)
do.call(tabsetPanel, myTabs)
)
# create datatables
observe(
lapply(seq_len(length(input$decision)), function(i)
output[[paste0("datatable_",i)]] <- DT::renderDataTable(
as.data.frame(get(input$decision[i]))
)
)
)
)
【讨论】:
很好的解决方案。如果数据是在服务器中定义的,而不是全局或内置数据,则可以在 get 之外的末尾简单地添加强制的()
。例如get(input$decision[i])()
。我花了 15 分钟才弄清楚。以上是关于R Shiny:如何将数据表添加到动态创建的选项卡的主要内容,如果未能解决你的问题,请参考以下文章
在 R Shiny 中使用 ActionButton 跳转到选项卡项
如何使选项卡和选项卡栏视图在颤动中动态化,以便它能够响应来自 api 的响应?