gpt4 book ai didi

r - 在函数调用中与R的全局环境不一致

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

我在玩R时,发现与全局环境有关的函数调用存在一些不一致,与实际的全局环境有所不同。

考虑以下:

> test = function () 
+ {
+ print(environmentName(as.environment(-1)))
+ print(ls(as.environment(-1)))
+ print(environmentName(.GlobalEnv))
+ print(ls(.GlobalEnv))
+ as.environment(-1)
+ }
> foo = 1
> ls()
[1] "foo" "test"
> test()
[1] ""
[1] "doTryCatch" "expr" "handler" "name" "parentenv"
[1] "R_GlobalEnv"
[1] "foo" "test"
<environment: R_GlobalEnv>

在函数调用中, as.environment(-1)返回一个声称它为 <environment: R_GlobalEnv>的环境,但是在所述环境上调用 environmentName时,其名称为空字符。此外,其内容与真实全局环境中的内容有所不同。这到底是怎么回事?

我首先注意到在调用中使用 mget的错误,因为找不到全局定义的变量。这似乎违反直觉,因为通常在引用函数中的变量时,R会在封闭环境中向上搜索,直到找到变量的定义,包括全局环境。

最佳答案

这是惰性评估的结果:

test <- function () {
e <- as.environment(-1)

list(
lazy = ls(as.environment(-1)),
eager = ls(envir = e)
)
}

foo <- 1
test()
#> $lazy
#> [1] "doTryCatch" "expr" "handler" "name" "parentenv"
#>
#> $eager
#> [1] "foo" "test"

关于r - 在函数调用中与R的全局环境不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22151601/

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