R Shiny:如何将数据表添加到动态创建的选项卡中

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)