R Shiny

时间:2016-11-03 18:07:23

标签: r shiny

我有一个带有一组tabPanels的navbarMenu可以正常工作(下面的代码块1),但我想让它动态化,以便我可以根据启动时的条件添加或删除tabPanel 。我在下面的第2块中所做的一些事情(但这并不起作用)。我看到了一些链接,人们说这是不可能的,但似乎必须有办法。实际上,我只需要在启动时包含或不包含tabPanels,并且不需要它来真正动态。

我看到一个与tabsetPanel关联的示例:R Shiny - add tabPanel to tabsetPanel dynamically (with the use of renderUI)。在这里它说它不可能:reactive tabPanel in a navbarMenu in Shiny

第1栏:有效,但不是动态

library(shiny)
runApp(list(
  ui = navbarPage(

    tabPanel("a"

    ),
    tabPanel("b"),
    navbarMenu('g', 
                 tabPanel("c"),
                 tabPanel("d")
    )
  ),
  server = function(input, output, session){


  }
))

第2区:我想要这样的事情 - 这不起作用

library(shiny)
runApp(list(
  ui = navbarPage(

    tabPanel("a"

    ),
    tabPanel("b"),
    navbarMenu('g', 
                 uiOutput('tabs')
    )
  ),
  server = function(input, output, session){

    output$tabs <- renderUI({

      listoftabs <- c("c", "d")
      lapply(listoftabs, tabPanel)

    })
  }
))

reactive tabPanel in a navbarMenu in Shiny

1 个答案:

答案 0 :(得分:0)

使用ifelse的@warmoverflow(谢谢!)的答案可以使用非常有限数量的选项卡,但如果您想要包含或排除的选项卡是中间选项卡,则无法使用逗号进行正常操作。这是一个解决方案,我稍微重写了navbarMenu函数,以便您删除满足条件的选项卡

library(shiny)
runApp(list(
  ui = navbarPage(

    tabPanel("a"

    ),
    tabPanel("b"),
    f('g', drop = ifelse(1==1, 2, 3), 
               tabPanel("first"),
               tabPanel("firstinside"),
               tabPanel("secondinside"),
               tabPanel("last")
      )
),
  server = function(input, output, session){


  }
))



f <- function (title, drop , ..., icon = NULL) 
{
    structure(list(title = title, tabs = list(...)[-drop], iconClass = shiny:::iconClass(icon)), 
        class = "shiny.navbarmenu")
}