Odpowiedzi:
Oto prosty konstrukt, który to zrobi, używając setdiff
:
rm(list=setdiff(ls(), "x"))
I pełny przykład. Uruchom to na własne ryzyko - usunie wszystkie zmienne oprócz x
:
x <- 1
y <- 2
z <- 3
ls()
[1] "x" "y" "z"
rm(list=setdiff(ls(), "x"))
ls()
[1] "x"
Korzystanie z keep
funkcji z gdata
pakietu jest dość wygodne.
> ls()
[1] "a" "b" "c"
library(gdata)
> keep(a) #shows you which variables will be removed
[1] "b" "c"
> keep(a, sure = TRUE) # setting sure to TRUE removes variables b and c
> ls()
[1] "a"
Myślę, że inną opcją jest otwarcie obszaru roboczego w RStudio, a następnie zmiana listy na siatkę w prawym górnym rogu środowiska (obrazek poniżej). Następnie zaznacz obiekty, które chcesz usunąć, i na koniec kliknij wyczyść.
Spędziłem kilka godzin na poszukiwaniu odpowiedzi na podobne, ale nieco inne pytanie - musiałem móc usunąć wszystkie obiekty w R (w tym funkcje) oprócz kilku wektorów.
Jednym ze sposobów na to:
rm(list=ls()[! ls() %in% c("a","c")])
Gdzie wektory, które chcę zachować, mają nazwy „a” i „c”.
Mam nadzieję, że pomoże to każdemu, kto szuka tego samego rozwiązania!
rm(list=setdiff(ls(), c("a", "c")))
, prawda? Zobacz odpowiedź @ Andrie.
Aby zachować wszystkie obiekty, których nazwy pasują do wzorca, możesz użyć grep
:
to.remove <- ls()
to.remove <- c(to.remove[!grepl("^obj", to.remove)], "to.remove")
rm(list=to.remove)
Zamień v
na nazwę obiektu, który chcesz zachować
rm(list=(ls()[ls()!="v"]))
hat-tip: http://r.789695.n4.nabble.com/Removing-objects-and-clearing-memory-tp3445763p3445865.html
Wykorzystuje ls()
to pattern
opcję, w przypadku, gdy masz wiele obiektów z tym samym wzorem, którego nie chcesz zachować:
> foo1 <- "junk"; foo2 <- "rubbish"; foo3 <- "trash"; x <- "gold"
> ls()
[1] "foo1" "foo2" "foo3" "x"
> # Let's check first what we want to remove
> ls(pattern = "foo")
[1] "foo1" "foo2" "foo3"
> rm(list = ls(pattern = "foo"))
> ls()
[1] "x"
rm
funkcji należy zawsze korzystać ostrożnie (zwłaszcza w powłoce!). Zobacz moją edycję, aby uzyskać odpowiedź na twoje pytanie.
require(gdata)
keep(object_1,...,object_n,sure=TRUE)
ls()
Z poziomu funkcji, rm wszystkie obiekty w .GlobalEnv oprócz funkcji
initialize <- function(country.name) {
if (length(setdiff(ls(pos = .GlobalEnv), "initialize")) > 0) {
rm(list=setdiff(ls(pos = .GlobalEnv), "initialize"), pos = .GlobalEnv)
}
}
Poniższe spowoduje usunięcie wszystkich obiektów z konsoli
rm(list = ls())