function - 编写一个函数来删除对象(如果存在)

标签 function r

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

相关文章:

c++ - 为什么这些函数会截断返回值?

r - 两条 geom_smooth() 线之间的差异

r - rgdal "gdal-config"配置错误

r - 判断公式是否包含随机效应的最佳方法?

Bash 返回语句中出现非法数字错误

c - 如何修改传递给函数的二维数组?

R:如何根据因子水平计算差异?

r - 如何检查后续日期变量是否出现在前一个日期变量之上或之后

r - 如何将 openstreetmap 与 R 中的点结合起来

javascript - 如何在 JavaScript 中获取字符串表示的参数数组