Jak mogę usunąć wszystkie obiekty poza jednym z obszaru roboczego w R?

Mam przestrzeń roboczą z wieloma obiektami i chciałbym usunąć wszystkie oprócz jednego. Najlepiej by było, gdybym nie musiał wpisywać rm(obj.1, obj.2... obj.n). Czy można wskazać remove all objects but these ones?

 156
r
Author: amonk, 2011-05-31

13 answers

Oto prosta konstrukcja, która 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 z wyjątkiem x:

x <- 1
y <- 2
z <- 3
ls()
[1] "x" "y" "z"

rm(list=setdiff(ls(), "x"))

ls()
[1] "x"
 273
Author: Andrie,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-05-31 16:01:17

Używanie funkcji keep z pakietu gdata 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"
 42
Author: Rahul Premraj,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-08-26 13:04:09

Myślę, że kolejną opcją jest otwarcie obszaru roboczego w RStudio, a następnie zmiana listy na grid w prawym górnym rogu środowiska(obrazek poniżej). Następnie zaznacz obiekty, które chcesz wyczyścić, a na koniec kliknij Wyczyść.

Tutaj wpisz opis obrazka

 35
Author: Sadegh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-16 02:35:24

Aby zachować wszystkie obiekty, których nazwy pasują do wzorca, możesz użyć grep, w następujący sposób:

to.remove <- ls()
to.remove <- c(to.remove[!grepl("^obj", to.remove)], "to.remove")
rm(list=to.remove)
 15
Author: Aaron,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-05-31 16:03:46

Zastąp v nazwą obiektu, który chcesz zachować

rm(list=(ls()[ls()!="v"]))

Końcówka kapelusza: http://r.789695.n4.nabble.com/Removing-objects-and-clearing-memory-tp3445763p3445865.html

 13
Author: Ben,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-05 12:15:54

Właśnie spędziłem kilka godzin szukając odpowiedzi na podobne, ale nieco inne pytanie - musiałem być w stanie usunąć wszystkie obiekty w R (w tym funkcje) z wyjątkiem garstki wektorów.

Jeden sposób, aby to zrobić:

rm(list=ls()[! ls() %in% c("a","c")])

Gdzie wektory, które chcę zachować, noszą nazwy " a " i "c".

Mam nadzieję, że pomoże to każdemu, kto szuka tego samego rozwiązania!

 10
Author: Talon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-15 22:27:51

Wykorzystuje To opcję ls()'s pattern, w przypadku gdy masz wiele obiektów o tym samym wzorze, których 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"
 4
Author: Peter Diakumis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-11 13:33:09
require(gdata)
keep(object_1,...,object_n,sure=TRUE)
ls()
 2
Author: Holly,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-26 22:32:48

Z wewnątrz funkcji, rm wszystkie obiekty w .GlobalEnv z wyjątkiem funkcji

initialize <- function(country.name) {

  if (length(setdiff(ls(pos = .GlobalEnv), "initialize")) > 0) {
    rm(list=setdiff(ls(pos = .GlobalEnv), "initialize"), pos = .GlobalEnv)
  }

}
 1
Author: Griffith Feeney,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-05 19:17:04

Co ty na to?

# Removes all objects except the specified & the function itself.

rme <- function(except=NULL){
  except = ifelse(is.character(except), except, deparse(substitute(except)))
  rm(list=setdiff(ls(envir=.GlobalEnv), c(except,"rme")), envir=.GlobalEnv)
}
 0
Author: think,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-23 21:30:36

Zakładając, że chcesz usunąć wszystkie obiekty poza df ze środowiska:

rm(list = ls(pattern="[^df]"))
 0
Author: MCH,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-08 13:20:18

Pomyślmy inaczej, co jeśli chcemy usunąć grupę? spróbuj tego,

 rm(list=ls()[grep("xxx",ls())]) 

Osobiście nie lubię zbyt wielu tabel, zmiennych na ekranie, ale nie mogę ich uniknąć. Więc nazywam tymczasowe rzeczy zaczynając od "xxx", więc mogę je usunąć po tym, jak nie jest już używany.

 0
Author: Grec001,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-15 07:04:08

Poniższe spowoduje usunięcie wszystkich obiektów z konsoli

rm(list = ls())
 -6
Author: Vishnu Kumar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-04 11:12:29