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