expr()
defuses an R expression with
injection support.
It is equivalent to base::bquote()
.
See also
Defusing R expressions for an overview.
enquo()
to defuse non-local expressions from function arguments.sym()
andcall2()
for building expressions (symbols and calls respectively) programmatically.base::eval()
andeval_bare()
for resuming evaluation of a defused expression.
Examples
# R normally returns the result of an expression
1 + 1
#> [1] 2
# `expr()` defuses the expression that you have supplied and
# returns it instead of its value
expr(1 + 1)
#> 1 + 1
expr(toupper(letters))
#> toupper(letters)
# It supports _injection_ with `!!` and `!!!`. This is a convenient
# way of modifying part of an expression by injecting other
# objects.
var <- "cyl"
expr(with(mtcars, mean(!!sym(var))))
#> with(mtcars, mean(cyl))
vars <- c("cyl", "am")
expr(with(mtcars, c(!!!syms(vars))))
#> with(mtcars, c(cyl, am))
# Compare to the normal way of building expressions
call("with", call("mean", sym(var)))
#> with(mean(cyl))
call("with", call2("c", !!!syms(vars)))
#> with(c(cyl, am))