我正在尝试编写一个删除对象(如果存在)的函数。原因是我想摆脱日志消息错误:找不到对象'arg'。我尝试了以下方法:

ifrm <- function(arg)
{
   if(exists(as.character(substitute(arg)))){rm(arg)}
}

不幸的是,这不会删除该对象(如果存在)
> ifrm <- function(arg)
+ {
+    if(exists(as.character(substitute(arg)))){rm(arg)}
+ }
> a <- 2
> ifrm(a)
> a
[1] 2

有什么暗示我在这里做错了吗?

最佳阿尔布雷希特

最佳答案

捕获用户提供给函数的参数的惯用语是deparse(substitute(foo))。此函数类似于@Ian Ross的函数,但采用以下标准用法:

ifrm <- function(obj, env = globalenv()) {
    obj <- deparse(substitute(obj))
    if(exists(obj, envir = env)) {
        rm(list = obj, envir = env)
    }
}

我假设您只想从全局环境中删除对象,因此它是默认设置,但是您可以通过env提供一个环境。它在起作用:
> a <- 1:10
> ls()
[1] "a"    "ifrm"
> ifrm(a)
> ls()
[1] "ifrm"
> ifrm(a)
> ls()
[1] "ifrm"

关于function - 编写函数以删除对象(如果存在),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7172568/

10-12 17:33