R: Conditional Panel

conditionalPanel {shiny} | R Documentation

## Conditional Panel

### Description

Creates a panel that is visible or not, depending on the value of a JavaScript expression. The JS expression is evaluated once at startup and whenever Shiny detects a relevant change in input/output.

### Usage

    conditionalPanel(condition, ..., ns = NS(NULL))

### Arguments

`condition` | A JavaScript expression that will be evaluated repeatedly to determine whether the panel should be displayed.
`...` | Elements to include in the panel.
`ns` | The `namespace` object of the current module, if any.

### Details

In the JS expression, you can refer to `input` and `output` JavaScript objects that contain the current values of input and output. For example, if you have an input with an id of `foo`, then you can use `input.foo` to read its value. (Be sure not to modify the input/output objects, as this may cause unpredictable behavior.)

### Note

You are not recommended to use special JavaScript characters such as a period `.` in the input id's, but if you do use them anyway, for example, `inputId = "foo.bar"`, you will have to use `input["foo.bar"]` instead of `input.foo.bar` to read the input value.

### Examples

    ## Only run this example in interactive R sessions
    if (interactive()) {
      ui <- fluidPage(
        sidebarPanel(
          selectInput("plotType", "Plot Type",
            c(Scatter = "scatter", Histogram = "hist")
          ),
          # Only show this panel if the plot type is a histogram
          conditionalPanel(
            condition = "input.plotType == 'hist'",
            selectInput(
              "breaks", "Breaks",
              c("Sturges", "Scott", "Freedman-Diaconis", "[Custom]" = "custom")
            ),
            # Only show this panel if Custom is selected
            conditionalPanel(
              condition = "input.breaks == 'custom'",
              sliderInput("breakCount", "Break Count", min = 1, max = 50, value = 10)
            )
          )
        ),
        mainPanel(
          plotOutput("plot")
        )
      )

      server <- function(input, output) {
        x <- rnorm(100)
        y <- rnorm(100)

        output$plot <- renderPlot({
          if (input$plotType == "scatter") {
            plot(x, y)
          } else {
            breaks <- input$breaks
            if (breaks == "custom") {
              breaks <- input$breakCount
            }

            hist(x, breaks = breaks)
          }
        })
      }

      shinyApp(ui, server)
    }

[Package shiny version 1.0.5 Index]