| constant | R Documentation |
A constant is a fixed value that incorporates its very computation. This
is none other than a function that computes a fixed value when called
without arguments. constant() declares such a function as a bona fide
constant by transforming it to a function that caches the value of its void
call (i.e., constant()
memoizes void functions).
Combine %>>>% with constant() for a lazy, structured
alternative to the
magrittr `%>%`
operator (see ‘Examples’).
constant(f) variable(f)
f |
Function, or symbol or name (string) thereof, that can be called
without arguments. (NB: |
constant() yields a function without formal arguments that returns
the (cached, visibility-preserving) value of the void call f().
variable() is the inverse transformation of constant(): it
recovers the underlying (uncached) function of a constant function.
%>>>%
# Function with a constant return value
val <- {message("Computing from scratch"); mtcars} %>>>%
split(.$cyl) %>>>%
lapply(function(data) lm(mpg ~ wt, data)) %>>>%
lapply(summary) %>>>%
sapply(`[[`, "r.squared")
# With every invocation, `val()` is computed anew:
val()
val()
# Declaring `val` as a constant ensures that its value is computed only once.
# On subsequent calls, the computed value is simply fetched:
const <- constant(val)
const()
const()
# As values, `val()` and `const()` are identical. But `const()`, moreover,
# has structure, namely the function `const`:
const
# For instance, you can inspect the intermediate summaries:
head(const, -1)()
# Which can itself be a constant:
summ <- constant(head(const, -1))
summ()
summ()
## Not run:
# Think of `%>>>%` combined with `constant()` as a lazy, structured
# alternative to the magrittr `%>%` operator.
library(magrittr)
val2 <- mtcars %>%
split(.$cyl) %>%
lapply(function(data) lm(mpg ~ wt, data)) %>%
lapply(summary) %>%
sapply(`[[`, "r.squared")
# `val2` and `const()` are identical values. But whereas `val2` is computed
# immediately and carries no structure, `const` embodies the process that
# produces its value, and allows you to defer its realization to the
# invocation `const()`.
stopifnot(identical(val2, const()))
## End(Not run)
# Use `variable()` to recover the original (\dQuote{variable}) function
val_var <- variable(const)
stopifnot(identical(val_var, val))
val_var()
val_var()
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.