sun*_*lsu 80 environment r function-call stack-frame
如果有人能用一个简单的例子说明这一点会有所帮助吗?
此外,在哪里使用parent.frame()而不是parent.env()反之亦然.
Mar*_*gan 95
parent.env是定义闭包(例如,函数)的环境.parent.frame是调用闭包的环境.
f = function()
c(f=environment(), defined_in=parent.env(environment()),
called_from=parent.frame())
g = function()
c(g=environment(), f())
Run Code Online (Sandbox Code Playgroud)
然后
> g()
$g
<environment: 0x14060e8>
$f
<environment: 0x1405f28>
$defined_in
<environment: R_GlobalEnv>
$called_from
<environment: 0x14060e8>
Run Code Online (Sandbox Code Playgroud)
我不确定凡凡人真的想要使用它们,但这些概念在理解词汇范围方面很有用
> f = function() x
> g = function() { x = 2; f() }
> h = function() { x = 3; function() x }
> x = 1
> f()
[1] 1
> g()
[1] 1
> h()()
[1] 3
Run Code Online (Sandbox Code Playgroud)
或者在R简介中的神秘"银行账户"示例中.详细信息部分的第一段?parent.frame可能会澄清事情.
环境在R中是普遍存在的,例如,search()路径是(大约)环境在兄弟关系 - >父关系中链接在一起.人们有时会看到env = new.env(parent=emptyenv())绕过符号查找 - 通常env[["x"]]会先查看env,然后在env父母中找不到.同样,<<-从中查找分配parent.env.R中相对较新的引用类实现依赖于这些想法来定义特定于实例的环境,其中可以找到符号(实例字段和方法).
| 归档时间: |
|
| 查看次数: |
32470 次 |
| 最近记录: |