Моя пам’ять засмічується купою проміжних файлів (називайте їх temp1, temp2 тощо). Чи можна видалити їх з пам'яті, не роблячи rm(temp1)
, по rm(temp2)
черзі? Я намагався rm(list(temp1, temp2, etc.))
, але, здається, це не спрацьовує.
Моя пам’ять засмічується купою проміжних файлів (називайте їх temp1, temp2 тощо). Чи можна видалити їх з пам'яті, не роблячи rm(temp1)
, по rm(temp2)
черзі? Я намагався rm(list(temp1, temp2, etc.))
, але, здається, це не спрацьовує.
Відповіді:
Складіть список як вектор символів (а не вектор імен)
rm(list = c('temp1','temp2'))
або
rm(temp1, temp2)
rm(list = ls(all = TRUE))
якщо хочеш бути впевненим, що все отримаєш.
%>%
? Такі якlist(...) %>% rm(list = .)
list
? Мені здається надмірно складним вводити всі імена змінних, а не просто автозаповнення TAB у другому варіанті.
Інше рішення rm(list=ls(pattern="temp"))
- видалити всі об’єкти, що відповідають шаблону.
ls(...)
зробив, але тепер, мабуть, це як функція Unix bash ls?) - ну, Джош Полсон використав специфічний сорт, описаний @SamTo remove everything in the memory, you can say: rm(list = ls())
pattern="^temp"
буде ловити лише змінну, що починається на "temp", отже, не змінну ABCtemp
.
Або за допомогою регулярних виразів
"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)