假设我有以下语言对象:
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。