首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检测环境是否是全局环境

检测环境是否是全局环境
EN

Stack Overflow用户
提问于 2013-09-05 13:27:40
回答 2查看 571关注 0票数 4

有时,检测环境是否是全球环境并采取相应行动可能是有用的。我想出了一种方法来探测环境,并测试它是否是全球环境。我只是不想重新发明车轮,如果有更好的方法,或者这有漏洞等。有没有某种内置的R方法来做global_test下面做的事情,还是一个更好的方法?

代码语言:javascript
复制
global_test <- function() {
    environmentName(parent.frame(n = 1)) == "R_GlobalEnv"
}

global_test()

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

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

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-09-05 13:47:29

我会简化你的生活并使用identical

代码语言:javascript
复制
global_test <- function() {
    identical( parent.frame(n = 1) , globalenv() )
}

我认为这应该比做一个角色比较要安全一些,因为你可以这样做:

代码语言:javascript
复制
e <- new.env()
attr(e,"name") <- "R_GlobalEnv"

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

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

代码语言:javascript
复制
.GlobalEnv <- 1
identical( parent.frame(n = 1) , .GlobalEnv )
#[1] FALSE

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

代码语言:javascript
复制
## even for unusual R objects :
identical(.GlobalEnv, environment())

因此,即使我们试图欺骗R,这个函数仍然有效:

代码语言:javascript
复制
e <- new.env()
attr(e,"name") <- "R_GlobalEnv"
.GlobalEnv <- 1
global_test()
#[1] TRUE
票数 11
EN

Stack Overflow用户

发布于 2013-09-05 13:47:22

也许是sys.nframe

代码语言:javascript
复制
sys.nframe() == 0L
#[1] TRUE

fun <- function() {
  sys.nframe() == 0L
}

fun()
#[1] FALSE
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18637656

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档