有时,检测环境是否是全球环境并采取相应行动可能是有用的。我想出了一种方法来探测环境,并测试它是否是全球环境。我只是不想重新发明车轮,如果有更好的方法,或者这有漏洞等。有没有某种内置的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()发布于 2013-09-05 13:47:29
我会简化你的生活并使用identical
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] FALSEidentical的这种用法实际上是?identical上帮助页面中的示例之一
## even for unusual R objects :
identical(.GlobalEnv, environment())因此,即使我们试图欺骗R,这个函数仍然有效:
e <- new.env()
attr(e,"name") <- "R_GlobalEnv"
.GlobalEnv <- 1
global_test()
#[1] TRUE发布于 2013-09-05 13:47:22
也许是sys.nframe
sys.nframe() == 0L
#[1] TRUE
fun <- function() {
sys.nframe() == 0L
}
fun()
#[1] FALSEhttps://stackoverflow.com/questions/18637656
复制相似问题