gpt4 book ai didi

r - 不在搜索路径上的环境是否有父级?

转载 作者:行者123 更新时间:2023-12-04 09:22:10 25 4
gpt4 key购买 nike

我正在阅读 Hadley Wickham's Advanced R book并且正在阅读“环境”一章
它说除了 emptyenv 之外的每个环境都有一个父级。我需要帮助理解一些可以让我明白这一点的东西——也许我只是把它复杂化了或者误解了变量在 R 中的工作原理。
假设我定义了自己的环境:myenv <- new.env()现在,如果我做一个简单的 parent.env(myenv)我确实按预期获得了全局环境。
但是现在当我附加这个环境时会发生什么,导致它进入全局环境上方的搜索路径?attach(myenv)现在,如果我使用 search() 查看搜索路径我可以看到 myenv.GlobalEnv 的父级.我也可以使用 parent.env(globalenv()) 来验证这一点返回 myenv .如果我跑 parent.env(parent.env(globalenv()))然后我得到 tools:rstudio这是有道理的。
但是 如果我尝试查看 myenv 的父级直接使用 parent.env(myenv)我得到了全局环境。为了获得我期望的结果( tools:rstudio ),我需要手动将环境转换为环境:parent.env(as.environment("myenv"))返回 tools:rstudio .
那么哪个是正确的? myenv 的父环境是什么?
我知道我可以使用 parent.env<- 更改环境的父级,但如果我只是像上面的例子那样附加它,我不明白什么被认为是真正的 parent

最佳答案

问题是附加 myenv创建一个 复制 myenv (并且还修改了它的父级)所以我们现在有两个 myenv环境,它们可以并且是不同的。你已经在问题中表明他们有不同的 parent 。在新的 session 中尝试此操作以进一步表明它们是不同的:

myenv <- new.env()
myenv$x <- 1

# with the attach below we now have 2 myenv environments -
# the one above and the new one created in the attach below on the search path.
attach(myenv)

# this changes x in the original myenv but not the x in the copy on the search path
myenv$x <- 2
myenv$x
## 2

# the copy of myenv on the search path still has the original value of x
as.environment("myenv")$x
## 1

看看这个 blog post更多。

关于r - 不在搜索路径上的环境是否有父级?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27729074/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com