Я хотел бы создать функцию (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()
Ответ 1
ls()
нужно искать в нужном месте. По умолчанию он выглядит в текущем фрейме функции функции CleanEnvir
в вашем случае и, следовательно, находил только "pattern"
в вашем оригинале.
CleanEnvir <- function(pattern = "tmp") {
objs <- ls(pos = ".GlobalEnv")
rm(list = objs[grep("tmp", objs)], pos = ".GlobalEnv")
}
Что дает:
> 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"
Ответ 2
Вам нужно выполнить поиск в Global Env, а также там:
CleanEnvir <- function(pattern = "tmp"){
rm(list = ls(envir=globalenv())[
grep("tmp", ls(envir=globalenv()))], envir = globalenv())
}
Ответ 3
Самое короткое решение для кода, которое я получил для этого:
удалить определенную переменную:
y <- TRUE
CleanEnvir <- function(x) {rm(list=deparse(substitute(x)),envir=.GlobalEnv)}
CleanEnvir(y)
y
заменитель deparse, чтобы вставить имя переменной, а не ее значение,
и действительно pos = ".GlobalEnv" работает, но вы также можете просто использовать envir =.GlobalEnv
РЕШЕНИЕ 2: Это фактически позволяет сопоставлять шаблоны. (Я настоятельно рекомендую против этого, потому что вы можете удалить вещи, которые вы не хотите удалять случайно. Т.е. вы хотите удалить tmp1 и tmp2, но вы забыли, что есть другая переменная, которая называется Global.tmp и localtmp, как при температуре для пример.
удалить по шаблону:
myvar1 <- TRUE
myvar2 <- FALSE
Pat.clean.Envir <- function(x) { rm(list = ls(.GlobalEnv)[grep(deparse(substitute(x)), ls(.GlobalEnv))], envir = .GlobalEnv) }
Pat.clean.Envir(myvar)
приветствий.