【问题标题】:R Shiny dynamic multilevel/nested tabPanel with renderUIR闪亮的动态多级/嵌套tabPanel与renderUI
【发布时间】:2018-02-03 05:42:27
【问题描述】:

我想在另一个 tabsetPanel 中创建一个 tabsetPanel。 第二个 tabsetPanel 的选项卡数量应该取决于第一级选项卡中的 selectizeInput。

这个最小的例子似乎几乎没问题。但是,当在输入框中选择二级选项卡时,创建的选项卡会立即消失。

挑战在于如何在 lapply 函数中获取 selectizeInput 的输出。

    library(shiny)

    ui <- fluidPage(mainPanel(
      selectizeInput(
        inputId  = "letters",
        label    = "Select letters for level 1 tabs",
        choices  = LETTERS,
        selected = c('A', 'B', 'C'),
        multiple = TRUE
      ),

      uiOutput('mytabs')

    ))


server <- function(input, output) {

  output$mytabs <- renderUI({

    level1Tabs <- lapply(1:length(input$letters),
                         function(i) {
                           tabPanel(input$letters[i],
                                    test2 <- renderUI({
                                      selectizeInput(
                                        inputId  = 'numbers',
                                        label    = 'Select numbers for level 2 tabs',
                                        choices  =  1:10,
                                        multiple = TRUE
                                      )
                                    }),


                                    do.call(tabsetPanel,
                                            lapply(1:length(input$numbers), function(j) {
                                              tabPanel(input$numbers[j],
                                                       h5('test'))

                                            })))


                         })

    do.call(tabsetPanel, level1Tabs)

  })

}

# Run the application
shinyApp(ui = ui, server = server)

【问题讨论】:

    标签: r shiny lapply tabpanel


    【解决方案1】:

    答案很简单:只需将内层 tabsetPanel 放在 renderUI 中

    renderUI({
      do.call(tabsetPanel,
              lapply(1:length(input$numbers), function(j) {
                tabPanel(input$numbers[j],
                         h5('test'))
    
              }))
    })
    

    这将阻止更新/刷新 selectizeInput(数字)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-01
      • 1970-01-01
      • 2017-05-15
      • 2021-09-02
      • 2018-03-23
      • 2013-10-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多