有一些与此类似的问题,但是提供的答案是针对那些问题的,这些问题中给出的示例比我的情况要复杂得多。
我有一个简单的函数,可以在全局环境(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
是最新的。如果功能失败,我希望我的环境为空。
答案 0 :(得分:0)
我弄清楚了问题所在-我需要将rm()
指向全球环境:
if(exists("global_obj")) rm("global_obj", envir = globalenv())