从函数中删除.GlobalEnv中的对象

Ber*_*iss 13 environment r

我想创建一个函数(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)


42-*_*42- 8

您需要在Global Env中进行搜索以及在那里删除:

CleanEnvir <- function(pattern = "tmp"){
      rm(list = ls(envir=globalenv())[
             grep("tmp", ls(envir=globalenv()))], envir = globalenv())
  }
Run Code Online (Sandbox Code Playgroud)