-
Notifications
You must be signed in to change notification settings - Fork 1.9k
/
freezeReactiveValue.Rd
69 lines (62 loc) · 2.4 KB
/
freezeReactiveValue.Rd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/reactives.R
\name{freezeReactiveVal}
\alias{freezeReactiveVal}
\alias{freezeReactiveValue}
\title{Freeze a reactive value}
\usage{
freezeReactiveVal(x)
freezeReactiveValue(x, name)
}
\arguments{
\item{x}{For \code{freezeReactiveValue}, a \code{\link[=reactiveValues]{reactiveValues()}}
object (like \code{input}); for \code{freezeReactiveVal}, a
\code{\link[=reactiveVal]{reactiveVal()}} object.}
\item{name}{The name of a value in the \code{\link[=reactiveValues]{reactiveValues()}} object.}
}
\description{
These functions freeze a \code{\link[=reactiveVal]{reactiveVal()}}, or an element of a
\code{\link[=reactiveValues]{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 \code{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. \strong{NOTE:} We are considering deprecating
\code{freezeReactiveVal}, and \code{freezeReactiveValue} except when \code{x} is \code{input}.
If this affects your app, please let us know by leaving a comment on
\href{https://github.com/rstudio/shiny/issues/3063}{this GitHub issue}.
}
\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)
}
}
\seealso{
\code{\link[=req]{req()}}
}