freezeReactiveVal
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. |
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.
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)
}