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)