配置:
OS : Windows 10 (64 bits)
R version: 3.6.3
我正在学习 R,目前我正在阅读 R 中的环境。我正在做一些练习,我想出了一个我自己创建的例子,但似乎我仍然无法解释和理解正确查找 R 中的对象。一般来说,到目前为止我所理解的(如果我错了,请纠正我)是,如果 R 在当前环境中找不到对象,它会按所有现有父环境的顺序调用。为了看看它在实践中是如何工作的,我创建了以下程序:
library(rlang)
library(envnames)
library(lobstr)
e1 <- env()
e2 <- new_environment(parent = e1)
e3 <- new_environment(parent = e2)
e4 <- new_environment(parent = e3)
e5 <- new_environment(parent = e4)
e6 <- new_environment(parent = e5)
e7 <- new_environment(parent = e6)
e8 <- new_environment(parent = e7)
e9<- new_environment(parent = e8)
e10 <- new_environment(parent = e9)
e4$testvar <- 1200
e10$testfun <- function(x) {
print(envnames::environment_name(caller_env()))
return (testvar)
}
这是我通过选择 e10 作为调用者环境来运行上述程序的方法
with(data = e10, expr = e10$testfun())
鉴于testvar在环境e4中定义并且e4是e10的祖先,我希望 R 在父树中从 e10 上升到 e4 以找到 testvar 的值。但是程序停止并出现以下错误:
Error in e10$testfun() (from #3) : object 'testvar' not found
你能告诉我我误解了什么吗?我使用的事实with(data = e10, ...)
不应该暗示用于函数调用的环境是 e10?