使用两个变量计算表达式中的一个变量

时间:2012-02-08 20:56:30

标签: r expression eval

我想用均值= 7来评估f

 mean=7
 f <-  expression(-(x-mean)^2/2)

然后得到一个新的表达式:

 -(x-7)^2/2

我怎么能这样做?感谢。

3 个答案:

答案 0 :(得分:2)

这是一种方式。

f <- as.call(f)
eval(substitute(substitute(expr, list(mean=7)), list(expr= f)))
# -(x - 7)^2/2()

如果这种结构让人感到精神恍惚,你就不需要感到孤独:即使是编写R手册的人也会把你在这里提出的问题称为"a puzzle"

答案 1 :(得分:0)

gsub怎么样?

avg <- 7
f <- expression(-(x-avg)^2/2)
f.new <- as.expression(gsub('avg',avg,f))

expression("-(x - 7)^2/2")

在旁注中,您应该避免使用meandata等名称定义变量,因为它们是在R函数中构建的。

答案 2 :(得分:0)

在S-Plus中,substitute函数有一个额外的evaluate参数,因此它很容易。不幸的是,R缺少那个论点......

# in S-Plus:
x <- expression(-(x-mean)^2/2)
substitute(x, list(mean=7), evaluate=TRUE)
#-(x - 7)^2/2

...所以你必须诉诸@JoshO'Brien建议的东西。考虑使用R core将其记录为功能请求; - )