在R替代

时间:2017-12-12 19:28:39

标签: r

我有一个存储在变量

中的表达式
a <- expression(10 + x + y)

我想使用替换来用x = 2

填充表达式
substitute(a, list(x=2))

但是这会将aa评估为expression(10 + x + y)

理想情况下,a会评估为expression(12 + y)(或(10 + 2 + y)

使用存储在变量a中的表达式(由项目的其他部分强制执行)时,是否有任何方法可以实现此行为?

3 个答案:

答案 0 :(得分:2)

使用do.callsubstitute不会进入某些对象,但如果您在此处使用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)