Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I neatly clean my R workspace while preserving certain objects?

Tags:

r

statistics

Suppose I'm messing about with some data by binding vectors together, as I'm wont to do on a lazy sunday afternoon.

    x <- rnorm(25, mean = 65, sd = 10)
    y <- rnorm(25, mean = 75, sd = 7)
    z <- 1:25

    dd <- data.frame(mscore = x, vscore = y, caseid = z)

I've now got my new dataframe dd, which is wonderful. But there's also still the detritus from my prior slicings and dicings:

    > ls()
    [1] "dd"        "x"          "y"          "z"         

What's a simple way to clean up my workspace if I no longer need my "source" columns, but I want to keep the dataframe? That is, now that I'm done manipulating data I'd like to just have dd and none of the smaller variables that might inadvertently mask further analysis:

    > ls()
    [1] "dd"

I feel like the solution must be of the form rm(ls[ -(dd) ]) or something, but I can't quite figure out how to say "please clean up everything BUT the following objects."

like image 515
briandk Avatar asked May 12 '10 20:05

briandk


2 Answers

I would approach this by making a separate environment in which to store all the junk variables, making your data frame using with(), then copying the ones you want to keep into the main environment. This has the advantage of being tidy, but also keeping all your objects around in case you want to look at them again.

temp <- new.env()
with(temp, {
    x <- rnorm(25, mean = 65, sd = 10) 
    y <- rnorm(25, mean = 75, sd = 7) 
    z <- 1:25 
    dd <- data.frame(mscore = x, vscore = y, caseid = z)
    }
)

dd <- with(temp,dd)

This gives you:

> ls()
[1] "dd"   "temp"
> with(temp,ls())
[1] "dd" "x"  "y"  "z" 

and of course you can get rid of the junk environment if you really want to.

like image 73
Fojtasek Avatar answered Sep 18 '22 13:09

Fojtasek


Here is an approach using setdiff:

rm(list=setdiff(ls(), "dd"))
like image 32
rcs Avatar answered Sep 21 '22 13:09

rcs