在函数中使用rm函数

时间:2018-03-30 09:15:11

标签: r

我有使用rm功能的问题。 rm的最小例子如下:

{
  "success":true,
  "terms":"https:\/\/currencylayer.com\/terms",
  "privacy":"https:\/\/currencylayer.com\/privacy",
  "timestamp":1522395543,
  "source":"USD",
  "quotes":{
    "USDGBP":0.71
  }
}

但是,如果我想包装rm函数,那么我遇到了一个问题:

env <- new.env()
assign("v", 3, envir = env)
ls(env)
> [1] "v"
rm("v", envir = env)
ls(env)
> character(0)

我想知道如何解决这个问题,以及为什么会发生这个问题

1 个答案:

答案 0 :(得分:1)

当您传递rm()命名对象(例如val)时,它将尝试删除指定环境中名为val的对象。但是,您可以使用rm()的“list”选项为其指定要删除的对象名称的字符向量;来自help("rm")

  

参数

     

...要删除的对象,如名称(未引用的)或字符   字符串(引用)。

     

列出要命名对象的字符向量   除去。

所以,我们这样做:

rm_wrapper <- function(val, envi){rm(list = val, envir = envi)}
env <- new.env()
assign("v", 3, envir = env)
rm_wrapper("v", env)
ls(env)
# character(0)

我们还可以确保您发送rm()包装器的字符向量不是命名对象,如下所示:

rm_wrapper <- function(..., envi){rm(..., envir = envi)}
env <- new.env()
assign("v", 3, envir = env)
rm_wrapper("v", envi = env)
ls(env)
# character(0)