gpt4 book ai didi

r - 检测环境是否为全局环境

转载 作者:行者123 更新时间:2023-12-02 01:08:35 29 4
gpt4 key购买 nike

有时,检测环境是否是全局环境并采取相应行动可能很有用。我想出了一种我认为是检测环境并测试它是否是全局环境的方法。如果有更好的方法或者有漏洞等,我只是不想重新发明轮子。是否有某种内置的 R 方法可以执行下面的 global_test 操作或更好的方法?

global_test <- function() {
environmentName(parent.frame(n = 1)) == "R_GlobalEnv"
}

global_test()

lapply(1:10, function(i) {
global_test()
})

fun <- function() global_test()
fun()

最佳答案

我会稍微简化你的生活并使用相同:

global_test <- function() {
identical( parent.frame(n = 1) , globalenv() )
}

认为这应该比进行字符比较稍微“安全”,因为你可以这样做:

e <- new.env()
attr(e,"name") <- "R_GlobalEnv"

# And then...
environmentName(e)
#[1] "R_GlobalEnv"

正如 @eddi 所指出的,使用 .GlobalEnv 也可能不是可取的,因为可以这样做:

.GlobalEnv <- 1
identical( parent.frame(n = 1) , .GlobalEnv )
#[1] FALSE

identical 的这种用法实际上是 ?identical 帮助页面上的示例之一:

## even for unusual R objects :
identical(.GlobalEnv, environment())

因此,即使我们尝试欺骗 R,该函数仍然有效:

e <- new.env()
attr(e,"name") <- "R_GlobalEnv"
.GlobalEnv <- 1
global_test()
#[1] TRUE

关于r - 检测环境是否为全局环境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18637656/

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