DQdlM
DQdlM

Reputation: 10244

How can I remove all objects but one from the workspace in R?

I have a workspace with lots of objects and I would like to remove all but one. Ideally I would like to avoid having to type rm(obj.1, obj.2... obj.n). Is it possible to indicate remove all objects but these ones?

Upvotes: 299

Views: 239576

Answers (14)

Peter
Peter

Reputation: 2361

To keep a list of objects, one can use:

rm(list=setdiff(ls(), c("df1", "df2")))

Upvotes: 19

f0nzie
f0nzie

Reputation: 1206

# remove all objects but selected
rm(list = ls()[which("key_function" != ls())])

Upvotes: 2

Grec001
Grec001

Reputation: 1121

let's think in different way, what if we wanna remove a group? try this,

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

I personally don't like too many tables, variables on my screen, yet I can't avoid using them. So I name the temporary things starting with "xxx", so I can remove them after it is no longer used.

Upvotes: 3

MCH
MCH

Reputation: 480

assuming you want to remove every object except df from environment:

rm(list = ls(pattern="[^df]"))

Upvotes: 2

Holly
Holly

Reputation: 41

require(gdata)
keep(object_1,...,object_n,sure=TRUE)
ls()

Upvotes: 4

think
think

Reputation: 312

How about this?

# 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)
}

Upvotes: 1

Peter Diakumis
Peter Diakumis

Reputation: 4032

This takes advantage of ls()'s pattern option, in the case you have a lot of objects with the same pattern that you don't want to keep:

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

Upvotes: 6

Sadegh
Sadegh

Reputation: 796

I think another option is to open workspace in RStudio and then change list to grid at the top right of the environment(image below). Then tick the objects you want to clear and finally click on clear.

enter image description here

Upvotes: 74

Talon
Talon

Reputation: 581

I just spent several hours hunting for the answer to a similar but slightly different question - I needed to be able to delete all objects in R (including functions) except a handful of vectors.

One way to do this:

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

Where the vectors that I want to keep are named 'a' and 'c'.

Hope this helps anyone searching for the same solution!

Upvotes: 58

Griffith Feeney
Griffith Feeney

Reputation: 31

From within a function, rm all objects in .GlobalEnv except the function

initialize <- function(country.name) {

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

}

Upvotes: 3

Ben
Ben

Reputation: 42283

Replace v with the name of the object you want to keep

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

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

Upvotes: 21

Rahul Premraj
Rahul Premraj

Reputation: 1595

Using the keep function from the gdata package is quite convenient.

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

Upvotes: 75

Aaron - mostly inactive
Aaron - mostly inactive

Reputation: 37689

To keep all objects whose names match a pattern, you could use grep, like so:

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

Upvotes: 21

Andrie
Andrie

Reputation: 179388

Here is a simple construct that will do it, by using setdiff:

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

And a full example. Run this at your own risk - it will remove all variables except x:

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

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

ls()
[1] "x"

Upvotes: 515

Related Questions