我有一个存储在变量
中的表达式a <- expression(10 + x + y)
我想使用替换来用x = 2
substitute(a, list(x=2))
但是这会将a
和a
评估为expression(10 + x + y)
理想情况下,a
会评估为expression(12 + y)
(或(10 + 2 + y)
)
使用存储在变量a
中的表达式(由项目的其他部分强制执行)时,是否有任何方法可以实现此行为?
答案 0 :(得分:2)
使用do.call
。 substitute
不会进入某些对象,但如果您在此处使用a[[1]]
,则可以使用。
a <- expression(10 + x + y)
do.call("substitute", list(a[[1]], list(x = 2)))
## 10 + 2 + y
答案 1 :(得分:2)
如果您可以使用替代方法(即pryr
代替quote
),则可以使用expression
执行此操作:
a <- quote(10 + x + y)
library(pryr)
substitute_q(a, list(x=2))
#10 + 2 + y
答案 2 :(得分:0)
也许这一段代码可能很有用
x <- 1; y <- 2
a <- expression(10 + x + y)
eval(a)