SEH*_*ETT 8 tabs r dynamic shiny dt
我目前正在尝试创建动态创建的数据表,每个表都有自己的选项卡.选项卡的数量由用户确定.我已经使用这篇文章中的代码作为框架.
我能够动态创建选项卡,但我无法弄清楚如何将数据表添加到选项卡.数据表也由用户输入确定.因此,例如,在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')
)
)
))
Run Code Online (Sandbox Code Playgroud)
server.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)
})
})
Run Code Online (Sandbox Code Playgroud)
因此,我希望将相应的数据集分别呈现在每个选项卡下的数据表中.
提前感谢您的帮助!
Car*_*arl 12
要做你想做的事,你需要在动态生成它们时添加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]))
})
})
)
})
Run Code Online (Sandbox Code Playgroud)