5

假设我有以下语言对象:

lang <- quote( f(x=a) )

我想替换1a. 我怎样才能做到这一点?

我希望substitute做我想做的事,但是

substitute(lang, list(a=1))

只是返回lang,而

substitute(f(x=a), list(a=1))

实际上确实做到了我的期望。

4

3 回答 3

5

使用do.call

do.call(substitute, list(lang, list(a=1)))

通过使用do.call,我们强制将名称评估`lang`为其实际基础值 ,f(x=a)。然后替换是执行的f(x=a),而不是名称`lang`

于 2013-10-09T20:59:16.833 回答
3

如果您之前a在某些环境 ( .GlobalEnv) 中定义为:

a <- 1

您通常可以运行:

construct(deconstruct_and_eval(lang))
f(x = 1)

有关这些自定义函数的定义,请参阅通用函数以替换 quote()d 表达式中的所有变量(如果它们存在于环境中)

于 2013-10-13T23:31:34.323 回答
2

您可以使用substituteDirect而不是substitute

substituteDirect(lang, list(a=1))

最终你也许可以使用substitute. 根据?substituteDirect

目标是用 的eval=参数替换它substitute

于 2016-12-28T09:42:09.113 回答