web-dev-qa-db-fra.com

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 j'aimerais supprimer tous sauf un. Idéalement, j'aimerais éviter de taper rm(obj.1, obj.2... obj.n). Est-il possible d'indiquer remove all objects but these ones?

168
KennyPeanuts

Voici une construction simple qui le fera en utilisant setdiff:

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

Et un exemple complet. Exécutez ceci à vos risques et périls - toutes les variables seront supprimées à l'exception de x:

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

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

ls()
[1] "x"
302
Andrie

Utiliser la fonction keep du paquetage 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"
44
Rahul Premraj

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

enter image description here

40
Sadegh

Pour conserver tous les objets dont les noms correspondent à un modèle, vous pouvez utiliser grep, comme suit:

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

Je venais de passer plusieurs heures à chercher la réponse à une question similaire mais légèrement différente - je devais être en mesure de supprimer tous les objets de R (y compris les fonctions) sauf une poignée de vecteurs.

Une façon de faire ceci:

rm(list=ls()[! ls() %in% c("a","c")])

Où les vecteurs que je veux garder sont nommés "a" et "c".

J'espère que cela aidera tous ceux qui recherchent la même solution!

14
Talon

Remplacez v par le nom de l'objet que vous souhaitez conserver. 

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

hat-tip: http://r.789695.n4.nabble.com/Removing-objects-and-clearing-memory-tp3445763p3445865.html

13
Ben

Ceci tire parti de l'option pattern de ls(), dans le cas où vous avez beaucoup d'objets avec le même motif que vous ne souhaitez pas conserver:

> foo1 <- "junk"; foo2 <- "rubbish"; foo3 <- "trash"; x <- "gold"  
> ls()
[1] "foo1" "foo2" "foo3" "x"   
> # Let's check first what we want to remove
> ls(pattern = "foo")
[1] "foo1" "foo2" "foo3"
> rm(list = ls(pattern = "foo"))
> ls()
[1] "x"
4
Peter Diakumis
require(gdata)
keep(object_1,...,object_n,sure=TRUE)
ls()
2
Holly

Depuis une fonction, rm tous les objets de .GlobalEnv sauf la fonction

initialize <- function(country.name) {

  if (length(setdiff(ls(pos = .GlobalEnv), "initialize")) > 0) {
    rm(list=setdiff(ls(pos = .GlobalEnv), "initialize"), pos = .GlobalEnv)
  }

}
1
Griffith Feeney

pensons différemment, et si nous voulions supprimer un groupe? essayez ceci,

 rm(list=ls()[grep("xxx",ls())]) 

Personnellement, je n'aime pas trop les tableaux, les variables sur mon écran, mais je ne peux pas éviter de les utiliser. Je nomme donc les éléments temporaires commençant par «xxx» afin de pouvoir les supprimer une fois qu’ils ne sont plus utilisés.

1
Grec001

Que dis-tu de ça?

# Removes all objects except the specified & the function itself.

rme <- function(except=NULL){
  except = ifelse(is.character(except), except, deparse(substitute(except)))
  rm(list=setdiff(ls(envir=.GlobalEnv), c(except,"rme")), envir=.GlobalEnv)
}
0
think

en supposant que vous souhaitiez supprimer tous les objets sauf df de l'environnement:

rm(list = ls(pattern="[^df]"))
0
MCH
# remove all objects but selected
rm(list = ls()[which("key_function" != ls())])
0
f0nzie