R内部的呼叫和评估功能

时间:2011-07-12 20:58:02

标签: r call eval

我正在编写一个函数,我想提供一个包含要在函数内部进行求值的条件的变量。例如,我有一个小时变量,包含0,3,6,9,18,3,6,9,18,0,18等值...我想选择小时变量匹配为0,6的索引这个0,6可能会根据其他一些参数而改变。基本上它们并不总是固定的。所以我传递一个变量g1 = call("which", (hourval==0 | hourval == 6))。我希望在程序中评估此语句。因此我使用语句x1 = eval(g1)。显然,当我传递变量g1时,不会生成那个时间的小时变量,而是在eval(g1)语句之前生成它。我收到错误,找不到对象hourval。有没有其他方法可以解决这个问题。

在此先感谢,感谢任何帮助。

Narayani Barve

2 个答案:

答案 0 :(得分:7)

这是你想要的吗?

> hourval <- c(0, 3, 6, 9, 18, 3, 6, 9, 18, 0, 3, 18)
> test <- c(0,6)
> which(hourval %in% test)
[1]  1  3  7 10

我花了一些时间才用这个搜索策略找到它

library(fortunes)
fortune("parse")

但最终得到了我记得的那个:

> fortune("parse")

If the answer is parse() you should usually rethink the question.
   -- Thomas Lumley
      R-help (February 2005)

我的部分困难在于我记得引用的内容是“eval(解析(”。

答案 1 :(得分:1)

这就是你似乎描述的内容

f1 <- function(y) {
  hourval <- c(0, 3, 6, 9, 18, 3, 6, 9, 18, 0, 3, 18)
  eval(substitute(y))
}
f1( which(hourval %in% c(0,6)) )

但这就是我要做的事情。

f2 <- function(y) {
  hourval <- c(0, 3, 6, 9, 18, 3, 6, 9, 18, 0, 3, 18)
  which(hourval %in% y)
}
f2( c(0,6) )

但同样,还没有足够的信息知道其中任何一个是否回答了问题。