Eliminar varios objetos con rm ()

84

Mi memoria se está obstruyendo con un montón de archivos intermedios (llámelos temp1, temp2, etc.). ¿Es posible eliminarlos de la memoria sin hacerlo rm(temp1), rm(temp2)uno a la vez? Lo intenté rm(list(temp1, temp2, etc.)), pero no parece funcionar.

user702432
fuente

Respuestas:

123

Haga de la lista un vector de caracteres (no un vector de nombres)

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

o

rm(temp1, temp2)
mnel
fuente
3
Para eliminar todo en la memoria, puede decir: rm (list = ls ())
Sam
5
@Sam rm(list = ls(all = TRUE))si quieres estar seguro de obtener todo.
Dason
1
¿Funciona en %>%? Tales comolist(...) %>% rm(list = .)
Jiaxiang
¿Podría explicar cuál es la ventaja list? Me parece innecesariamente complicado escribir todos los nombres de las variables en lugar de solo TAB autocompletar en la segunda opción.
laviex
112

Otra solución es rm(list=ls(pattern="temp"))eliminar todos los objetos que coincidan con el patrón.

Alan
fuente
Descrito aquí por Josh Paulson (no sabía qué ls(...)hizo, pero ahora supongo que es como la función de bash de Unix ls?) - Ups, Josh Paulson usó una variedad específica descrita por @SamTo remove everything in the memory, you can say: rm(list = ls())
The Red Pea
Esto funciona bien, pero puede tener un pequeño error. Si hay un objeto con el nombre 'ABCtemp', también se eliminará. ¿Cómo puedo eliminar esos objetos que comienzan con 'temp' y mantener el 'ABCtemp'?
user3768495
8
Simplemente puede agregar más criterio a su patrón. Para su ejemplo, pattern="^temp"solo capturará la variable que comience por "temp", por lo que no la variable ABCtemp.
Alan
1
Otra posibilidad es la respuesta dada por @BrodieG aquí stackoverflow.com/questions/21677923/…
verde
3

O usando expresiones regulares

"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
fuente
3

Otra variación que puede probar es (expandiendo la respuesta de @ mnel) si tiene muchos temp'x '.

aquí "n" podría ser el número de variables temporales presentes

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