【发布时间】:2017-06-08 06:01:37
【问题描述】:
我有几个关于函数的不同环境的问题。举个例子:
environment(sd)
# <environment: namespace:stats>
namespace:stats 是否指向函数 sd 的封闭环境?
pryr::where(sd)
# <environment: package:stats>
package:stats 是否指向函数 sd 的绑定环境?
根据Advanced R by Hadley Wickham:“封闭环境属于函数,永不改变……”
但是函数的封闭环境可以改变如下:
new.env <- new.env()
environment(f) <- new.env
函数的环境属性表示函数的执行环境,对吗? An online article regarding R finding stuff through environments
总结一下我的问题:
- 我们能否真正改变函数的封闭环境?
-
stats包的这两种不同环境是什么? - 函数的环境是什么?
这与之前的帖子in here 类似。
【问题讨论】:
-
不确定那里有问题,但这里有几个相关的 cmets: 1. 当在创建的环境中找不到变量时,函数的环境是继续搜索变量的地方当函数被调用时。 2. 用户(以及包)可以改变很多 R 自己不会改变的东西。我从 R 的内部结构来解释 Hadley 的 cmets。
-
@Jthorpe 我的帖子中提到了几个问题。我不明白为什么“封闭环境属于函数,永远不会改变......”是真的还是假的?此外,我已经知道您的评论 1,但我的困惑是作者说 environment(function) 表示函数的执行环境,我不明白。
-
@Amy 我冒昧地编辑了您的问题,使其更加流畅。我还编辑了我的答案。我错了,您无需复制即可更改该环境。只有当它是一个打包的函数时,你才能这样做。
标签: r function environment