Usuń wiele obiektów za pomocą rm ()

86

Moja pamięć jest zapychana przez kilka plików pośrednich (nazwij je temp1, temp2 itd.). Czy można je usunąć z pamięci bez robienia tego rm(temp1), rm(temp2)pojedynczo? Próbowałem rm(list(temp1, temp2, etc.)), ale to nie działa.

user702432
źródło

Odpowiedzi:

127

Ustaw listę jako wektor znaków (nie wektor nazw)

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

lub

rm(temp1, temp2)
mnel
źródło
4
Aby usunąć wszystko z pamięci, możesz powiedzieć: rm (list = ls ())
Sam
5
@Sam, rm(list = ls(all = TRUE))jeśli chcesz mieć pewność, że dostaniesz wszystko.
Dason
1
Czy to działa %>%? Na przykładlist(...) %>% rm(list = .)
Jiaxiang
Czy mógłbyś wyjaśnić, jakie to ma zalety list? Wydaje mi się niepotrzebnie skomplikowane wpisywanie wszystkich nazw zmiennych zamiast tylko autouzupełniania TAB w drugiej opcji.
laviex
112

Inne rozwiązanie rm(list=ls(pattern="temp")), usuń wszystkie obiekty pasujące do wzorca.

Alan
źródło
Opisane tu Josh Paulson (nie wiem co ls(...)zrobił, ale teraz myślę, że to jak ls bash funkcji Unix?) - ups, Josh Paulson stosować różnorodne specyficzne opisaną przez @SamTo remove everything in the memory, you can say: rm(list = ls())
Red Pea
Działa to dobrze, ale może mieć mały błąd.Jeśli istnieje obiekt o nazwie „ABCtemp”, zostanie on również usunięty. Jak mogę po prostu usunąć te obiekty, które zaczynają się od „temp” i zachować „ABCtemp”?
user3768495
8
Możesz po prostu dodać więcej kryteriów do swojego wzoru. Na przykład, pattern="^temp"złapie tylko zmienną zaczynającą się od „temp”, więc nie zmienną ABCtemp.
Alan
1
Inną możliwością jest odpowiedź udzielona przez @BrodieG tutaj stackoverflow.com/questions/21677923/…
zielona dioda
4

Inną odmianą, którą możesz wypróbować, jest (rozwijanie odpowiedzi @ mnel), jeśli masz wiele temp'x '.

tutaj „n” może oznaczać liczbę obecnych zmiennych tymczasowych

rm(list = c(paste("temp",c(1:n),sep="")))
Głębokie
źródło
3

Lub używając wyrażeń regularnych

"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
źródło