272 votes

Comment puis-je supprimer tous les objets sauf un de l'espace de travail dans R ?

J'ai un espace de travail avec beaucoup d'objets et je voudrais les supprimer tous sauf un. Idéalement, j'aimerais éviter d'avoir à taper rm(obj.1, obj.2... obj.n) . Est-il possible d'indiquer remove all objects but these ones ?

465voto

Andrie Points 66979

Voici une construction simple qui va le faire, en utilisant setdiff :

rm(list=setdiff(ls(), "x"))

Et un exemple complet. Exécutez-le à vos propres risques - il supprimera toutes les variables sauf x :

x <- 1
y <- 2
z <- 3
ls()
[1] "x" "y" "z"

rm(list=setdiff(ls(), "x"))

ls()
[1] "x"

12 votes

La technique utilisée ici consiste à utiliser list= à rm, ce qui permet de passer un vecteur de caractères à rm au lieu d'une liste de noms.

71voto

Rahul Premraj Points 424

Utilisation de la keep de la fonction gdata est très pratique.

> ls()
[1] "a" "b" "c"

library(gdata)
> keep(a) #shows you which variables will be removed
[1] "b" "c"
> keep(a, sure = TRUE) # setting sure to TRUE removes variables b and c
> ls()
[1] "a"

1 votes

Je trouve que l'utilisation de "keep" de gdata semble avoir plus de sens et qu'il est plus facile de s'en souvenir que toute la complexité de la commande dans la base R.

69voto

user3079143 Points 66

Je pense une autre option est d'ouvrir l'espace de travail dans RStudio, puis de changer la liste en grille en haut à droite de l'environnement (image ci-dessous). Cochez ensuite les objets que vous souhaitez effacer et cliquez enfin sur clear.

enter image description here

4 votes

De même, cliquez sur la case Nom, qui sélectionne tous les fichiers, puis désélectionnez tous les fichiers que vous souhaitez conserver.

20voto

Aaron Points 15093

Pour conserver tous les objets dont le nom correspond à un motif, on peut utiliser grep comme ça :

to.remove <- ls()
to.remove <- c(to.remove[!grepl("^obj", to.remove)], "to.remove")
rm(list=to.remove)

0 votes

Incroyable ! Connaissez-vous un moyen de faire de cette réponse un code d'une ligne au lieu de trois ?

19voto

Ben Points 8166

Remplacer v avec le nom de l'objet que vous voulez conserver

rm(list=(ls()[ls()!="v"]))

Coup de chapeau : http://r.789695.n4.nabble.com/Removing-objects-and-clearing-memory-tp3445763p3445865.html

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