我有使用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)
我想知道如何解决这个问题,以及为什么会发生这个问题
答案 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)