我想将一些查询传递给使用'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相同的输出。参数"q"是将在"x"上求值的某个常规查询。我保持示例的简单性和通用性,但我想将它的行为扩展到更复杂的函数和查询上。对我来说,重要的是如何"传递"查询"q",以便eval知道如何处理它,无论以前有多少级别的嵌套函数。
我该怎么做?谢谢
你可以做:
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)
因为您只定义了x
。您需要:
> f2(x, x$a<3)
> [1] TRUE TRUE FALSE FALSE FALSE