我正在尝试编写一个函数,如果对象存在,则删除该对象。原因是我想摆脱日志消息错误:找不到对象“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/