如何检查全局环境中是否存在对象,然后将其从函数中删除?

时间:2018-10-04 12:50:21

标签: r function environment-variables

有一些与此类似的问题,但是提供的答案是针对那些问题的,这些问题中给出的示例比我的情况要复杂得多。

我有一个简单的函数,可以在全局环境(global_obj)中创建对象。

让我们说:

my_function <- function(x){
    global_obj <<- x
}

如何设置函数以检查global_obj是否存在于全局环境中,如果存在,则在继续之前将其删除?

我尝试过这样的事情:

if(exists("global_obj")){ rm("global_obj"); print("global_obj removed") }

并且:

if(exists("global_obj")){ rm(global_obj); print("global_obj removed") }

但是收到错误消息:

[1] "global_obj removed"
Warning message:
In rm("global_obj") : object 'global_obj' not found

并且:

[1] "global_obj removed"
Warning message:
In rm(global_obj) : object 'global_obj' not found

尽管显示“成功消息”,但错误消息表明从未删除global_obj,因为找不到它。

一些答案​​建议将rm()指向全球环境,这是有道理的,但这仍然会导致相同的结果。

最后,我知道每次运行global_obj都将替换my_function(),但是有一个重要的原因导致我希望每次都删除它:这是为了防止出现任何实例该功能可能未正确完成但没有任何警告

因此,这使我相信我的全局环境中存在的global_obj是最近一次my_function()调用中的那个,而实际上我看到的global_obj可能是它以前执行时就已经存在。

我想确定我在全局环境中看到的global_obj是最新的。如果功能失败,我希望我的环境为空。

1 个答案:

答案 0 :(得分:0)

我弄清楚了问题所在-我需要将rm()指向全球环境:

if(exists("global_obj")) rm("global_obj", envir = globalenv())