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
?
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"
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"
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.
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)
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!
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
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"
require(gdata)
keep(object_1,...,object_n,sure=TRUE)
ls()
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)
}
}
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.
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)
}
en supposant que vous souhaitiez supprimer tous les objets sauf df de l'environnement:
rm(list = ls(pattern="[^df]"))
# remove all objects but selected
rm(list = ls()[which("key_function" != ls())])