Видаліть кілька об’єктів за допомогою rm ()


84

Моя пам’ять засмічується купою проміжних файлів (називайте їх temp1, temp2 тощо). Чи можна видалити їх з пам'яті, не роблячи rm(temp1), по rm(temp2)черзі? Я намагався rm(list(temp1, temp2, etc.)), але, здається, це не спрацьовує.

Відповіді:


123

Складіть список як вектор символів (а не вектор імен)

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

або

rm(temp1, temp2)

3
Щоб видалити все в пам'яті, ви можете сказати: rm (list = ls ())
Сем

5
@Sam, rm(list = ls(all = TRUE))якщо хочеш бути впевненим, що все отримаєш.
Дейсон

1
Це працює в %>%? Такі якlist(...) %>% rm(list = .)
Цзясян

Поясніть, будь ласка, у чому його перевага list? Мені здається надмірно складним вводити всі імена змінних, а не просто автозаповнення TAB у другому варіанті.
laviex

112

Інше рішення rm(list=ls(pattern="temp"))- видалити всі об’єкти, що відповідають шаблону.


Описаний тут Джошем Полсоном (я не знав, що ls(...)зробив, але тепер, мабуть, це як функція Unix bash ls?) - ну, Джош Полсон використав специфічний сорт, описаний @SamTo remove everything in the memory, you can say: rm(list = ls())
The Red Pea

Це працює нормально, але може мати невелику помилку. Якщо є об’єкт з назвою „ABCtemp“, його також буде видалено. Як я можу просто видалити ті об'єкти, які починаються з 'temp' і зберігати 'ABCtemp'?
user3768495

8
Ви можете просто додати більше критеріїв до свого шаблону. Для вашого прикладу, pattern="^temp"буде ловити лише змінну, що починається на "temp", отже, не змінну ABCtemp.
Алан

1
Інша можливість полягає в відповідь , даний @BrodieG тут stackoverflow.com/questions/21677923 / ...
зелений DioD

3

Або за допомогою регулярних виразів

"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

Ще однією варіацією, яку ви можете спробувати, є (розширення відповіді @ mnel), якщо у вас багато temp'x '.

тут "n" може бути кількістю тимчасових змінних

rm(list = c(paste("temp",c(1:n),sep="")))
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.