Suppose I have the following language object:
lang <- quote( f(x=a) )
and I want to substitute in 1
for a
. How can I do this?
I would expect substitute
to do what I want, but
substitute(lang, list(a=1))
just returns lang
, while
substitute(f(x=a), list(a=1))
does in fact do what I expect.
Use do.call
:
do.call(substitute, list(lang, list(a=1)))
By using do.call
, we force evaluation of the name `lang`
to its actual underlying value, f(x=a)
. Then substitution is performed on f(x=a)
, rather than the name `lang`
.
If you have previously defined a
in some environment (.GlobalEnv
) as:
a <- 1
You can generally run:
construct(deconstruct_and_eval(lang))
f(x = 1)
For the definitions of these custom functions, see Generalized function to substitute all variables in the quote()d expression, if they exist in an environment
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With