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

Mus*_*Guy 2 r function environment-variables

有一些与此类似的问题,但提供的答案是针对那些给出的示例比我的场景复杂得多的问题而定制的。

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

比方说:

my_function <- function(x){
    global_obj <<- x
}
Run Code Online (Sandbox Code Playgroud)

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

我尝试过这样的事情:

if(exists("global_obj")){ rm("global_obj"); print("global_obj removed") }
Run Code Online (Sandbox Code Playgroud)

和:

if(exists("global_obj")){ rm(global_obj); print("global_obj removed") }
Run Code Online (Sandbox Code Playgroud)

但收到错误消息:

[1] "global_obj removed"
Warning message:
In rm("global_obj") : object 'global_obj' not found
Run Code Online (Sandbox Code Playgroud)

和:

[1] "global_obj removed"
Warning message:
In rm(global_obj) : object 'global_obj' not found
Run Code Online (Sandbox Code Playgroud)

尽管显示“成功消息”,但错误消息暗示该文件global_obj从未被删除,因为找不到它。

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

最后,我知道global_obj每次运行时都会被替换my_function(),但是我每次都想删除它有一个重要原因:它是为了防止函数可能已错误完成但没有任何警告的任何情况

因此,这会让我相信global_obj我的全局环境中存在的环境是最近一次my_function()调用中的环境,而实际上global_obj我看到的环境可能是在之前的执行中存在的。

我想确定global_obj我在全球环境中看到的是最新的。如果该函数失败,我希望我的环境为空。

Mus*_*Guy 5

我找出了问题所在 - 我需要指出rm()全球环境:

if(exists("global_obj")) rm("global_obj", envir = globalenv())
Run Code Online (Sandbox Code Playgroud)