2012-07-24 19 views
48

Mi memoria se está atascando por un grupo de archivos intermedios (llámelos temp1, temp2, etc.). ¿Es posible eliminarlos de la memoria sin hacer rm(temp1), rm(temp2) de a uno por vez? Intenté rm(list(temp1, temp2, etc.)), pero eso no parece funcionar.Eliminar múltiples objetos con rm()

Respuesta

75

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

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

o

rm(temp1, temp2) 
+3

Para eliminar todo en la memoria, se puede decir: rm (list = ls()) – Sam

+2

@ Sam 'rm (list = ls (todo = VERDADERO)) 'si quieres estar seguro de obtener todo. – Dason

2

O el uso de 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) 
72

Una otra solución rm(list=ls(pattern="temp")), eliminar todo objetos que coinciden con el patrón.

+0

Descrito [aquí] (https://support.rstudio.com/hc/en-us/articles/200711843-Working-Directories-and-Workspaces) por Josh Paulson (no sabía qué 'ls (...) 'lo hizo, pero ahora supongo que es como la función de bash de Unix ls?) - gritos, Josh Paulson usó una variedad específica descrita por @Sam' Para eliminar todo en la memoria, puede decir: rm (list = ls()) ' –

+0

Esto funciona bien, pero podría 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

+4

Simplemente puede agregar más criterio a su patrón. Para su ejemplo, 'pattern ="^temp "' capturará solo la variable que comienza por "temp", por lo tanto no la variable 'ABCtemp'. – Alan

-1

ls() listará todas las variables. entonces, si prueba rm(list=ls()), borrará todas las variables.

+4

Esto no es la pregunta, y vea los comentarios bajo la respuesta aceptada. – Tensibai

1

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

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

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