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