as_quosure {rlang} | R Documentation |
Quosure objects wrap an expression with a lexical
enclosure. This is a powerful quoting (see base::quote()
and quo()
) mechanism that makes it possible to carry and
manipulate expressions while making sure that its symbolic content
(symbols and named calls, see is_symbolic()
) is correctly looked
up during evaluation.
new_quosure()
creates a quosure from a raw expression and an
environment.
as_quosure()
is useful for functions that expect quosures but
allow specifying a raw expression as well. It has two possible
effects: if x
is not a quosure, it wraps it into a quosure
bundling env
as scope. If x
is an unscoped quosure (see
is_quosure()
), env
is used as a default scope. On the other
hand if x
has a valid enclosure, it is returned as is (even if
env
is not the same as the formula environment).
While as_quosure()
always returns a quosure (a one-sided
formula), even when its input is a formula or a
definition, as_quosureish()
returns quosureish
inputs as is.
as_quosure(x, env = caller_env()) as_quosureish(x, env = caller_env())
x |
An object to convert. |
env |
An environment specifying the lexical enclosure of the quosure. |
# Sometimes you get unscoped formulas because of quotation: f <- ~~expr inner_f <- f_rhs(f) str(inner_f) is_quosureish(inner_f, scoped = TRUE) # You can use as_quosure() to provide a default environment: as_quosure(inner_f, base_env()) # Or convert expressions or any R object to a validly scoped quosure: as_quosure(quote(expr), base_env()) as_quosure(10L, base_env()) # While as_quosure() always returns a quosure (one-sided formula), # as_quosureish() returns quosureish objects: as_quosure(a := b) as_quosureish(a := b) as_quosureish(10L)