Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Function 编写函数以删除对象(如果存在)_Function_R - Fatal编程技术网

Function 编写函数以删除对象(如果存在)

Function 编写函数以删除对象(如果存在),function,r,Function,R,我正在尝试编写一个函数,如果对象存在,它将删除该对象。原因是我想消除日志消息错误:找不到对象“arg”。我尝试了以下方法: ifrm <- function(arg) { if(exists(as.character(substitute(arg)))){rm(arg)} } ifrm ifrm a ifrm(a) >a [1] 2 有什么提示我做错了什么吗 贝斯特·阿尔布雷希特(Best Albrecht)这有点难看,但似乎奏效了: ifrm <- function(ar

我正在尝试编写一个函数,如果对象存在,它将删除该对象。原因是我想消除日志消息错误:找不到对象“arg”。我尝试了以下方法:

ifrm <- function(arg)
{
   if(exists(as.character(substitute(arg)))){rm(arg)}
}
ifrm ifrm a ifrm(a)
>a
[1] 2
有什么提示我做错了什么吗


贝斯特·阿尔布雷希特(Best Albrecht)

这有点难看,但似乎奏效了:

ifrm <- function(arg) {
  if (exists(as.character(substitute(arg)))) {
    rm(list=as.character(substitute(arg)), envir=sys.frame())
  }
}

ifrm获取用户作为函数参数提供的内容的通用习惯用法是
deparse(substitute(foo))
。此函数类似于@Ian Ross的函数,但使用了以下标准习惯用法:

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

保持简单。只需将对象的名称作为字符串传递到函数中,而不是试图从实际对象获取名称

ifrm <- function(x, env = globalenv()) 
{
  if(exists(x, envir = env)) 
  {
    rm(list = x, envir = env)
  }
}
ifrm试试这个

 a=1; b=3; y=4; ls() 
 rm( list = Filter( exists, c("a", "b", "x", "y") ) )
 ls()

这听起来可能是一件危险的事情。您想给我们提供更多关于发生此错误的情况的详细信息吗?可能还有其他更合适的方法来处理您的错误消息。我同意Andrie的观点。提供的答案会满足您的要求,但最有可能的是,您实际应该做的事情更简单。看看try和trycatch。您试图处理不存在的对象的目的是什么?应该添加一个警告,即在嵌套函数中使用deparse(replacement())必然会带来麻烦。myrm@Joris+1很好,但是有人会说,不要那样做!;-)
ifrm <- function(x, env = globalenv()) 
{
  if(exists(x, envir = env)) 
  {
    rm(list = x, envir = env)
  }
}
 a=1; b=3; y=4; ls() 
 rm( list = Filter( exists, c("a", "b", "x", "y") ) )
 ls()