Entfernen Sie mehrere Objekte mit rm ()

84

Mein Gedächtnis wird durch eine Reihe von Zwischendateien verstopft (nennen Sie sie temp1, temp2 usw.). Ist es möglich , sie aus dem Speicher zu entfernen , ohne dabei rm(temp1), rm(temp2)einen nach dem anderen? Ich habe es versucht rm(list(temp1, temp2, etc.)), aber das scheint nicht zu funktionieren.

user702432
quelle

Antworten:

122

Machen Sie die Liste zu einem Zeichenvektor (kein Vektor von Namen)

rm(list = c('temp1','temp2'))

oder

rm(temp1, temp2)
mnel
quelle
3
Um alles im Speicher zu entfernen, können Sie sagen: rm (list = ls ())
Sam
5
@ Sam, rm(list = ls(all = TRUE))wenn Sie sicher sein wollen, alles zu bekommen.
Dason
1
Funktioniert es in %>%? Wielist(...) %>% rm(list = .)
Jiaxiang
Würden Sie bitte erklären, was der Vorteil davon ist list? Es scheint mir unnötig kompliziert zu sein, alle Variablennamen einzugeben, anstatt nur die automatische Vervollständigung von TAB in der zweiten Option.
Laviex
111

Eine andere Lösung rm(list=ls(pattern="temp")): Entfernen Sie alle Objekte, die dem Muster entsprechen.

Alan
quelle
Beschrieben hier von Josh Paulson (ich weiß nicht , was ls(...)getan hat, aber jetzt denke ich , es ist wie die Unix - Bash - Funktion ls?) - hoppla, verwendet Josh Paulson eine bestimmte Sorte beschrieben von @ SamTo remove everything in the memory, you can say: rm(list = ls())
The Red Pea
Dies funktioniert gut, hat aber möglicherweise einen kleinen Fehler. Wenn ein Objekt mit dem Namen 'ABCtemp' vorhanden ist, wird es ebenfalls entfernt. Wie kann ich nur die Objekte entfernen, die mit 'temp' beginnen, und das 'ABCtemp' beibehalten?
user3768495
8
Sie können Ihrem Muster einfach weitere Kriterien hinzufügen. In Ihrem Beispiel pattern="^temp"wird nur eine Variable ab "temp" abgefangen, also nicht die Variable ABCtemp.
Alan
1
Eine andere Möglichkeit ist die Antwort von @BrodieG hier stackoverflow.com/questions/21677923/…
grüne Diode
3

Oder mit regulären Ausdrücken

"rmlike" <- function(...) {
  names <- sapply(
    match.call(expand.dots = FALSE)$..., as.character)
  names = paste(names,collapse="|")
  Vars <- ls(1)
  r <- Vars[grep(paste("^(",names,").*",sep=""),Vars)]
  rm(list=r,pos=1)
}

rmlike(temp)
Dieter Menne
quelle
3

Eine andere Variante, die Sie ausprobieren können, ist (Erweitern der Antwort von @ mnel), wenn Sie viele Temp'x 'haben.

hier könnte "n" die Anzahl der vorhandenen temporären Variablen sein

rm(list = c(paste("temp",c(1:n),sep="")))
Deepesh
quelle