inject()
evaluates an expression with injection
support. There are three main usages:
Splicing lists of arguments in a function call.
Inline objects or other expressions in an expression with !!
and !!!
. For instance to create functions or formulas
programmatically.
Pass arguments to NSE functions that defuse their
arguments without injection support (see for instance
enquo0()
). You can use {{ arg }}
with functions documented
to support quosures. Otherwise, use !!enexpr(arg)
.
inject(expr, env = caller_env())
An argument to evaluate. This argument is immediately
evaluated in env
(the current environment by default) with
injected objects and expressions.
The environment in which to evaluate expr
. Defaults to
the current environment. For expert use only.
# inject() simply evaluates its argument with injection
# support. These expressions are equivalent:
2 * 3
#> [1] 6
inject(2 * 3)
#> [1] 6
inject(!!2 * !!3)
#> [1] 6
# Injection with `!!` can be useful to insert objects or
# expressions within other expressions, like formulas:
lhs <- sym("foo")
rhs <- sym("bar")
inject(!!lhs ~ !!rhs + 10)
#> foo ~ bar + 10
#> <environment: 0x56240e4aa310>
# Injection with `!!!` splices lists of arguments in function
# calls:
args <- list(na.rm = TRUE, finite = 0.2)
inject(mean(1:10, !!!args))
#> [1] 5.5