【问题标题】:Show tabPanel dynamically in Shiny在 Shiny 中动态显示 tabPanel
【发布时间】:2016-09-21 16:50:06
【问题描述】:

我正在使用 Shiny,我正在尝试根据一组参数动态显示一组 tabPanels。在下面的代码中,我想让第一个 tabPanel 仅在 showTab1 <- T 等时出现。

我尝试了简单的 if 语句和 conditionalPanels,但它失败了。下面是代码示例:

rm(list = ls())
library(shiny)
library(shinydashboard)

showTab1 <- T
showTab2 <- F
showTab3 <- T


ui <- dashboardPage(
  dashboardHeader(),
  dashboardSidebar(

  ),
  dashboardBody(
    uiOutput("tabs")
  )
)
server <- function(input, output) { 

output$tabs <- renderUI({


   tabBox(width = 1000,height = 500,

          if (showTab1 == T) { tabPanel("tab1") },

          if (showTab2 == T) { tabPanel("tab2") },

          if (showTab3 == T) { tabPanel("tab3") } 

          )



})


}

shinyApp(ui, server)

感谢您的帮助。

干杯, 科斯塔斯

【问题讨论】:

  • 感谢您的建议。可以看看下面的答案吗?

标签: r shiny


【解决方案1】:

您可以动态创建它们:

rm(list = ls())
library(shiny)
library(shinydashboard)

showTab1 <- T
showTab2 <- F
showTab3 <- T

ShowTotal <- which(c(showTab1,showTab2,showTab3))

ui <- dashboardPage(
  dashboardHeader(),
  dashboardSidebar(),
  dashboardBody(uiOutput("ui"))
)
server <- function(input, output) { 

  output$ui <- renderUI({
    myTabs = lapply(paste('tab', ShowTotal), tabPanel)
    do.call(tabsetPanel, myTabs)
  })
}

shinyApp(ui, server)

【讨论】:

  • 如果您看到我之前的回复,我想使用 tabBox 而不是 tabset 面板。好的,我知道 lapply 可以帮助您避免事情,但我对每种情况都有不同的 if 语句,而且更清楚。
【解决方案2】:

感谢您之前的回答。根据您的建议,我认为以下示例适用于我的情况。我唯一的问题是最后我无法调整tabBox的宽度和高度。

library(shiny)
library(shinydashboard)

showTab1 <- T
showTab2 <- F
showTab3 <- T

ShowTotal <- which(c(showTab1,showTab2,showTab3))

ui <- dashboardPage(
  dashboardHeader(),
  dashboardSidebar(),
  dashboardBody(uiOutput("ui"))
)
server <- function(input, output) { 

  output$ui <- renderUI({

    tabs <- list()
    k <- 0

    if (showTab1 == T){ 
        k <- k+1
        tabs[[k]] <- tabPanel("Tab1", p("A phrase"), br(""), p("I can place a chart here")) 
    }

    if (showTab2 == T){ 
        k <- k+1
    tabs[[k]] <- tabPanel("Tab2", p("B phrase"), br(""), p("I can place a chart here"))
    }

    if (showTab3 == T){ 
        k <- k+1
    tabs[[k]] <- tabPanel("Tab3", p("C phrase"), br(""), p("I can place a chart here"))
    }


    do.call(tabBox, tabs)

  })
}

shinyApp(ui, server)

谢谢, 科斯塔斯

【讨论】:

  • 这可以通过do.call(tabBox, c(tabs, height = "200px"))轻松完成
猜你喜欢
  • 2015-08-11
  • 1970-01-01
  • 1970-01-01
  • 2013-10-28
  • 1970-01-01
  • 2018-12-18
  • 2019-04-02
  • 1970-01-01
  • 2016-02-05
相关资源
最近更新 更多