我想将一些查询传递给使用' 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都知道如何处理它。
我该怎么做?谢谢!
答案 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