【发布时间】:2020-08-28 06:50:40
【问题描述】:
假设,我创建了环境 (E) 的父级父级环境 (E2
怎么了?请参阅下面可重现示例中的最后一行,其中print(parent-parent) 产生
# [1] FALSE # I would expect a TRUE here!!
来自文档?parent.env
如果一个人跟随通过反复调用找到的一系列外壳 parent.env 来自任何环境,最终到达空 环境emptyenv(),不能分配任何东西。
subfun0 <- function() {
e <- parent.frame()
attr(e, "name") <- "my_env"
assign("my_env", 1,
envir = parent.frame(),
inherits = FALSE, immediate = TRUE)
return(NULL)
}
subsubfun <- function() {
print(" subsubfun")
print(" =========")
print(exists("my_env"))
print(exists("my_env", parent.frame()))
env <- parent.frame()
print(exists("my_env", parent.env(env)))
# print(parent.env(env)) # <environment: R_GlobalEnv>??
return(NULL)
}
subfun <- function() {
print(" subfun")
print(" ======")
print(exists("my_env"))
print(exists("my_env", parent.frame()))
env <- parent.frame()
print(exists("my_env", parent.env(env)))
subsubfun()
return(NULL)
}
fun1 <- function() {
print("fun1")
print("====")
subfun0()
print(exists("my_env"))
print(exists("my_env", parent.frame()))
env <- parent.frame()
print(exists("my_env", parent.env(env)))
subfun()
return(NULL)
}
fun1()
# [1] "fun1"
# [1] "===="
# [1] TRUE # OK
# [1] FALSE
# [1] FALSE
# [1] " subfun"
# [1] " ======"
# [1] FALSE
# [1] TRUE # OK
# [1] FALSE
# [1] " subsubfun"
# [1] " ========="
# [1] FALSE
# [1] FALSE
# [1] FALSE # I would expect a TRUE here!!
【问题讨论】: