我想创建一个函数(CleanEnvir),它基本上调用remove/rm并从中删除某些对象.GlobalEnv.
CleanEnvir <- function(pattern = "tmp"){
rm(list = ls()[grep("tmp", ls())], envir = globalenv())
}
keep <- 1
tmp.to.be.removed <- 0
ls()
## does not work
CleanEnvir()
ls()
## does work
rm(list = ls()[grep("tmp", ls())], envir = globalenv())
ls()
Run Code Online (Sandbox Code Playgroud)
Rei*_*son 19
ls()需要找到正确的地方.默认情况下,它会查看当前帧,即CleanEnvir您的情况中的函数,因此仅查找"pattern"原始帧中的函数.
CleanEnvir <- function(pattern = "tmp") {
objs <- ls(pos = ".GlobalEnv")
rm(list = objs[grep("tmp", objs)], pos = ".GlobalEnv")
}
Run Code Online (Sandbox Code Playgroud)
这使:
> CleanEnvir <- function(pattern = "tmp") {
+ objs <- ls(pos = ".GlobalEnv")
+ rm(list = objs[grep("tmp", objs)], pos = ".GlobalEnv")
+ }
> ls()
[1] "CleanEnvir" "foo" "keep"
[4] "tmp.to.be.removed"
> CleanEnvir()
> ls()
[1] "CleanEnvir" "foo" "keep"
Run Code Online (Sandbox Code Playgroud)
您需要在Global Env中进行搜索以及在那里删除:
CleanEnvir <- function(pattern = "tmp"){
rm(list = ls(envir=globalenv())[
grep("tmp", ls(envir=globalenv()))], envir = globalenv())
}
Run Code Online (Sandbox Code Playgroud)