如何用R中的变量计算表达式?

时间:2013-12-14 09:43:15

标签: r variables expression eval

我希望此代码将plt设置为10:

> var = "plt"
> eval(paste0(var, "<-", 10))
[1] "plt<-10"

但相反,它会返回一个字符串。

我尝试了eval(as.expression(paste0(var, "<-", 10)))和其他选项,但它仍然没有给出预期的结果。

代码出了什么问题?

2 个答案:

答案 0 :(得分:8)

如果我理解你的评论,没有理由潜入eval(parse())的鲨鱼出没的水域。尝试这样的事情:

myfun <- function(x, fun) {
  if (is.character(fun)) fun <- match.fun(fun)
  fun(x)
}

myfun(1:5, mean)
#[1] 3
myfun(1:5, "mean")
#[1] 3

答案 1 :(得分:3)

请参阅:?parse。您的演示代码:

> var = "plt"
> eval(parse(text = paste0(var, "<-", 10)))
> plt
[1] 10

更新:基于@Anton关于原定目标的评论 - 如何:

> f <- function(type, ...) {
+     assign('plt', do.call(deparse(substitute(type)), list(...)), envir = .GlobalEnv)
+ }
> f(mean, x = 1:20)
> plt
[1] 10.5
PS:我仍然试图实现OP所追求的目标,而不是他可能或应该追求的目标 - 这就是我在assign.GlobalEnv上面使用的原因,尽管这不是一个好主意BTW