Удалите несколько объектов с помощью rm ()


86

Моя память забивается кучей промежуточных файлов (назовите их temp1, temp2 и т. Д.). Можно ли удалить их из памяти, не выполняя никаких действий rm(temp1), по rm(temp2)одному? Я пробовал rm(list(temp1, temp2, etc.)), но, похоже, это не сработало.

Ответы:


127

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

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

или же

rm(temp1, temp2)

4
Чтобы удалить все, что есть в памяти, скажите: rm (list = ls ())
Sam

5
@Sam, rm(list = ls(all = TRUE))если хочешь быть уверен, что получишь все.
Дейсон

1
Это работает %>%? Такие какlist(...) %>% rm(list = .)
Jiaxiang

Не могли бы вы объяснить, в чем его преимущество list? Мне кажется излишне сложным вводить все имена переменных вместо автозаполнения TAB во втором варианте.
laviex

112

Другое решение rm(list=ls(pattern="temp"))- удалить все объекты, соответствующие шаблону.


Описанный здесь Джошем Полсоном (я не знал, что ls(...)сделал, но теперь я думаю, что это похоже на функцию ls в Unix bash?) - упс, Джош Полсон использовал конкретный вариант, описанный @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/…
зеленый период

4

Другой вариант, который вы можете попробовать, - это (расширение ответа @mnel), если у вас много temp'x '.

здесь "n" может быть количеством присутствующих временных переменных.

rm(list = c(paste("temp",c(1:n),sep="")))

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)
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.