94 votes

Suppression de plusieurs objets avec rm()

Ma mémoire est encombrée par un tas de fichiers intermédiaires (appelés temp1 , temp2 ), et je voudrais savoir s'il est possible de les supprimer de la mémoire sans faire de répétition rm appels (c'est-à-dire rm(temp1) , rm(temp2) ) ?

J'ai essayé rm(list(temp1, temp2, etc.)) mais cela ne semble pas fonctionner.

139voto

mnel Points 48160

Faire de la liste un vecteur de caractères (et non un vecteur de noms)

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

o

rm(temp1, temp2)

128voto

Alan Points 876

Une autre solution rm(list=ls(pattern="temp")) supprimer tous les objets correspondant au motif.

5voto

Dieter Menne Points 5354

Ou en utilisant des expressions régulières

"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)

4voto

Deepesh Points 450

Une autre variante que vous pouvez essayer est (en développant la réponse de @mnel) si vous avez beaucoup de temp 'x'.

Ici, "n" pourrait être le nombre de variables temporelles présentes :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X