2012-07-24 14 views
48

La memoria è intasata da un gruppo di file intermedi (chiamarli temp1, temp2, ecc.). È possibile rimuoverli dalla memoria senza fare rm(temp1), rm(temp2) uno alla volta? Ho provato rm(list(temp1, temp2, etc.)), ma non sembra funzionare.Rimuovi più oggetti con rm()

risposta

75

fare l'elenco un vettore personaggio (non un vettore di nomi)

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

o

rm(temp1, temp2) 
+3

Per rimuovere tutto nella memoria, si può dire: rm (list = LS()) – Sam

+2

@ Sam 'rm (elenco = ls (tutto = VERO)) 'se vuoi essere sicuro di ottenere tutto. – Dason

2

o utilizzando le espressioni regolari

"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

Un altra soluzione rm(list=ls(pattern="temp")), rimuovere tutti oggetti che corrispondono al modello.

+0

Descritto [qui] (https://support.rstudio.com/hc/en-us/articles/200711843-Working-Directories-and-Workspaces) di Josh Paulson (non sapevo cosa 'ls (...), ma ora suppongo che sia come la funzione bash di Unix ls?) - whoops, Josh Paulson usava una specifica varietà descritta da @Sam 'Per rimuovere tutto nella memoria, puoi dire: rm (list = ls()) ' –

+0

Funziona bene ma potrebbe avere un piccolo bug. Se esiste un oggetto con nome 'ABCtemp', verrà rimosso. Come posso rimuovere quegli oggetti che iniziano con 'temp' e mantengono il 'ABCtemp'? – user3768495

+4

Puoi semplicemente aggiungere più criteri al tuo modello. Per il tuo esempio, 'pattern ="^temp "' catturerà solo la variabile che inizia con "temp", quindi non la variabile 'ABCtemp'. – Alan

-1

ls() elencherà tutte le variabili. quindi se provi a rm(list=ls()), cancellerà tutte le variabili.

+4

Questo non è la domanda, e vedere i commenti sotto la risposta accettata. – Tensibai

1

Un'altra variante che puoi provare è (espandendo la risposta di @ mnel) se hai molti temp'x '.

qui "n" potrebbe essere il numero di variabili temporanee presenti

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