R:在嵌套函数中将值传递给eval

时间:2014-10-10 10:30:05

标签: r eval

我想将一些查询传递给使用' eval'的低级函数。这是一个简单的例子:

f1 <- function(x, q) eval(substitute(q), envir=x)
f2 <- function(x, q) f1(x, q)

发生了什么:

> x <- data.frame(a=1:5)
> f1(x, a<3)
[1]  TRUE  TRUE FALSE FALSE FALSE
> f2(x, a<3)
Error in eval(expr, envir, enclos) : object 'a' not found

虽然我希望f2能像f1那样产生相同的输出。争论&#39; q&#39;是一些将在&#39; x&#39;上评估的一般查询。我保持示例简单而通用,但我想在更复杂的函数和查询上扩展它的行为。对我来说重要的是如何通过&#34;查询&#34; q&#34;因此,无论之前有多少级别的嵌套函数,eval都知道如何处理它。

我该怎么做?谢谢!

2 个答案:

答案 0 :(得分:2)

你可以这样做:

f1 <- function(x, q) eval(substitute(q), envir=x)
f2 <- function(x, q) eval(substitute(f1(x, q)))

y <- data.frame(a=1:5)
f1(y, a<3)
f2(y, a<3)

答案 1 :(得分:0)

因为您只定义了x。你需要:

> f2(x, x$a<3)
> [1]  TRUE  TRUE FALSE FALSE FALSE