R 如何从更高的环境中访问变量
然而,当这个函数被包装到另一个函数中时,它就失败了R 如何从更高的环境中访问变量,r,R,然而,当这个函数被包装到另一个函数中时,它就失败了 $x [1] 2 $z [1] 3 显然,eval函数只查看父环境,而不查看更高的环境。在调试模式下,它按预期工作: f <- function(x, y, z) { lapply(as.list(match.call()[-1]), eval) } f(x=2, z=3) Error in FUN(X[[i]], ...) : object 'a' not found >g(2) 调用自:g(2) 浏览[1]>a [1
$x
[1] 2
$z
[1] 3
显然,eval
函数只查看父环境,而不查看更高的环境。在调试模式下,它按预期工作:
f <- function(x, y, z) {
lapply(as.list(match.call()[-1]), eval)
}
f(x=2, z=3)
Error in FUN(X[[i]], ...) : object 'a' not found
>g(2)
调用自:g(2)
浏览[1]>a
[1] 2
这是取自?eval
示例:
> g <- function(a) {
+ browser()
+ f(x=a, z= 3)
+ }
> g(2)
Called from: g(2)
Browse[1]> a
[1] 2
是的,这就成功了,谢谢!你也要去eRum2018吗?回答
> g <- function(a) {
+ browser()
+ f(x=a, z= 3)
+ }
> g(2)
Called from: g(2)
Browse[1]> a
[1] 2
f <- function(x, y, z) {
e1 <- parent.frame()
lapply(as.list(match.call()[-1]), eval, envir = e1)
}
f(x=2, z=3)
g <- function(a) {
f(x=a, z= 3)
}
g(5)