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.

Odpowiedzi:


127

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

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

lub

rm(temp1, temp2)

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.


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="")))

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)
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.