Nina display
Nina display

Reputation: 23

condition on content of tabpanel shiny

i want to be able to display some contents if condtions is met, i would really appreciate some help. I think i am pretty cloose but need a boost. I want to be able to display :

Here is my code soo far :

library(shiny)

ui = navbarPage(
       "TEST",                        
       tabPanel("Iris data",
                uiOutput("tabs"),
                conditionalPanel(condition = "input.level==1",
                                 helpText("content1")
                ), 
                conditionalPanel(condition = "input.level==5",
                                 helpText("content2")
                )
       )
)

server = function(input, output, session) {
  output$tabs = renderUI({            
    Tabs <- as.list(colnames(iris))
    Tabs_type <- lapply(iris, function(x) class(x))

    for (i in 0:length(Tabs)){
      Tabs[i] = lapply(paste(Tabs[i], sep=" "),tabPanel, value = Tabs_type[[i]])
    }

    do.call(tabsetPanel, c(Tabs, id = "value"))            
  })
}

shinyApp(ui, server)

I don't know how to change the id to class(iris$ ... )

Thanks in advance for the help

Upvotes: 2

Views: 2583

Answers (1)

Gregor de Cillia
Gregor de Cillia

Reputation: 7655

Ok, you already looked at the answer I pointed you to in the comments. Here, I have it applied for your problem.

library(shiny)

ui = navbarPage(
  "TEST",                        
  tabPanel("Iris data",
           uiOutput("tabs"),
           conditionalPanel(condition = "output.cond1",
                            helpText("content1")
           ), 
           conditionalPanel(condition = "output.cond2",
                            helpText("content2")
           )
  )
)

server = function(input, output, session) {
  output$tabs = renderUI({            
    Tabs <- as.list(colnames(iris))
    Tabs_type <- lapply(iris, function(x) class(x))

    for (i in 0:length(Tabs)){
      Tabs[i] = lapply(paste(Tabs[i], sep=" "),tabPanel, value = Tabs_type[[i]])
    }
    do.call(tabsetPanel, c(Tabs, id = "value"))            
  })
  output$cond1 = reactive({
    input$value ==  "numeric"
  })
  outputOptions(output, "cond1", suspendWhenHidden = FALSE)
  output$cond2 = reactive({
    input$value ==  "factor"
  })
  outputOptions(output, "cond2", suspendWhenHidden = FALSE)

}

shinyApp(ui, server)

Upvotes: 1

Related Questions