# R normally returns the result of an expression
1 + 1
# `expr()` defuses the expression that you have supplied and
# returns it instead of its value
expr(1 + 1)
expr(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))))
vars <- c("cyl", "am")
expr(with(mtcars, c(!!!syms(vars))))
# Compare to the normal way of building expressions
call("with", call("mean", sym(var)))
call("with", call2("c", !!!syms(vars)))
Run the code above in your browser using DataLab