我有一个带有一组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)
})
}
))
答案 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")
}