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.

Antworten:


122

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

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

oder

rm(temp1, temp2)

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.


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)

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="")))
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.