Hier ist eine Funktion, die ich für Aufgaben wie diese verwendet werden. rmSome()
tut genau das, entfernt nur einige der Objekte aus einer Umgebung. Dies geschieht durch Anwenden der Funktion, die in ihrem ersten Argument gegeben ist (d. H. Eine is*
-Funktion wie is.data.frame()
für Datenrahmen, is.list()
für Listen usw.) zu der Liste von Objekten in der gegebenen Umgebung und zum Ausfiltern der Ergebnisse.
rmSome <- function(FUN, env = globalenv(), negate = FALSE) {
fun <- match.fun(FUN)
if(negate) fun <- Negate(fun)
objget <- mget(ls(envir = env), envir = env)
rmnames <- names(Filter(fun, objget))
rm(list = rmnames, envir = env)
}
Zum Beispiel können Sie alle Datenrahmen aus der globalen Umwelt mit
rmSome(is.data.frame)
Also für Ihr gegebenes Beispiel entfernen, können Sie die alle Datenrahmen wie folgt entfernen:
## -- rm(list=ls()) here --
## Define rmSome() here
DF1 <- data.frame(rnorm(10))
DF2 <- data.frame(rnorm(10))
DF3 <- data.frame(rnorm(10))
list1 <- list("a", "b", "c")
list2 <- list("a", "b", "c")
tf <- tempfile()
td <- tempdir()
## remove all data frames
rmSome(is.data.frame)
ls()
# [1] "list1" "list2" "rmSome" "td" "tf"
Auf der anderen Seite, wenn Sie alle Datenrahmen behalten und alles andere entfernen möchten, würden Sie das Entfernen von Datenrahmen wie folgt negieren:
rmSome(is.data.frame, negate = TRUE)
Bisher habe ich keine Probleme bei der Verwendung der anderen Funktionen wie is.numeric()
, is.environment()
usw. zum Entfernen von Numerik, Umgebungen, etc. Aber die Funktion ist derzeit nicht eingerichtet zu handhaben mehr als ein Objekttyp gefunden zu einer Zeit.
Update 1/28/2015:eapply()
kann auch zum Anwenden einer Funktion auf eine Umgebung verwendet werden. Hier ist eine zweite Funktion, die Sie verwenden könnten, wenn Sie mget()
nicht mögen. Es kann genau wie die oben genannten Aufrufe verwendet werden und ist wahrscheinlich der bessere Weg.
rmSome2 <- function(FUN, env = globalenv(), negate = FALSE) {
fun <- match.fun(FUN)
if(negate) fun <- Negate(fun)
ue <- unlist(eapply(env, fun))
rm(list = names(ue)[ue], envir = env)
}