2016-09-20 79 views
0

我正在使用Shiny,我試圖根據一組參數動態顯示一組tabPanels。在下面的代碼中,我想讓第一個tabPanel只出現在showTab1 <- T等等。在Shiny中動態顯示tabPanel

我試着用簡單的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) 

感謝您的幫助。

乾杯, 科斯塔斯

+0

感謝您的建議。可以看看下面的答案嗎? – mammask

回答

-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) 

感謝, 科斯塔斯

+0

這可以通過'do.call(tabBox,c(tabs,height =「200px」)) – mammask

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

+0

如果你看到我以前的回覆,我想使用tabBox而不是tabset面板。好的,我明白,lapply可以幫助你避免事情發生,但是對於每個案件我有不同的if語句,並且它更清晰。 – mammask