在Shiny中动态显示tabPanel

时间:2016-09-20 23:25:12

标签: r shiny

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

我尝试使用简单的if语句和conditionalPanel但它失败了。下面是一个代码示例:

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)

感谢您的帮助。

干杯, 科斯塔斯

2 个答案:

答案 0 :(得分: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)

enter image description here

答案 1 :(得分:-1)

先谢谢你的回答。根据您的建议,我认为以下示例可以适用于我的案例。我唯一的问题是,最终我无法调整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)

谢谢, 科斯塔斯