R: Freeze a reactive value

freezeReactiveVal {shiny} | R Documentation

## Freeze a reactive value

### Description

These functions freeze a `reactiveVal`, or an element of a `reactiveValues`. If the value is accessed while frozen, a "silent" exception is raised and the operation is stopped. This is the same thing that happens if `req(FALSE)` is called. The value is thawed (un-frozen; accessing it will no longer raise an exception) when the current reactive domain is flushed. In a Shiny application, this occurs after all of the observers are executed.

### Usage

    freezeReactiveVal(x)

    freezeReactiveValue(x, name)

### Arguments

`x` | For `freezeReactiveValue`, a `reactiveValues` object (like `input`); for `freezeReactiveVal`, a `reactiveVal` object.
`name` | The name of a value in the `reactiveValues` object.

### See Also

`req`

### Examples

    ## Only run this examples in interactive R sessions
    if (interactive()) {

    ui <- fluidPage(
      selectInput("data", "Data Set", c("mtcars", "pressure")),
      checkboxGroupInput("cols", "Columns (select 2)", character(0)),
      plotOutput("plot")
    )

    server <- function(input, output, session) {
      observe({
        data <- get(input$data)
        # Sets a flag on input$cols to essentially do req(FALSE) if input$cols
        # is accessed. Without this, an error will momentarily show whenever a
        # new data set is selected.
        freezeReactiveValue(input, "cols")
        updateCheckboxGroupInput(session, "cols", choices = names(data))
      })

      output$plot <- renderPlot({
        # When a new data set is selected, input$cols will have been invalidated
        # above, and this will essentially do the same as req(FALSE), causing
        # this observer to stop and raise a silent exception.
        cols <- input$cols
        data <- get(input$data)

        if (length(cols) == 2) {
          plot(data[[ cols[1] ]], data[[ cols[2] ]])
        }
      })
    }

    shinyApp(ui, server)
    }

[Package shiny version 1.0.3 Index]