假设我有以下语言对象:
lang <- quote( f(x=a) )
我想替换1
为a
. 我怎样才能做到这一点?
我希望substitute
做我想做的事,但是
substitute(lang, list(a=1))
只是返回lang
,而
substitute(f(x=a), list(a=1))
实际上确实做到了我的期望。
假设我有以下语言对象:
lang <- quote( f(x=a) )
我想替换1
为a
. 我怎样才能做到这一点?
我希望substitute
做我想做的事,但是
substitute(lang, list(a=1))
只是返回lang
,而
substitute(f(x=a), list(a=1))
实际上确实做到了我的期望。
使用do.call
:
do.call(substitute, list(lang, list(a=1)))
通过使用do.call
,我们强制将名称评估`lang`
为其实际基础值 ,f(x=a)
。然后替换是执行的f(x=a)
,而不是名称`lang`
。
如果您之前a
在某些环境 ( .GlobalEnv
) 中定义为:
a <- 1
您通常可以运行:
construct(deconstruct_and_eval(lang))
f(x = 1)
有关这些自定义函数的定义,请参阅通用函数以替换 quote()d 表达式中的所有变量(如果它们存在于环境中)
您可以使用substituteDirect
而不是substitute
:
substituteDirect(lang, list(a=1))
最终你也许可以使用substitute
. 根据?substituteDirect
:
目标是用 的
eval=
参数替换它substitute
。