Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

rm(list=ls()) doesn't completely clear the workspace

Tags:

r

This is a very minor issue, but I would like to understand exactly what is going on here.

Say I do the following:

library(RMySQL) con <- dbConnect(MySQL(), host="some.server.us-east-1.rds.amazonaws.com",user="aUser", password="password", dbname="mydb")  values1 <- dbGetQuery(con,"select x,y from table1") attach(values1) 

At this point, I can do

rm(list=ls())  values2 <- dbGetQuery("select x,y from table1") attach(values2) 

but the attach gives me a warning about masking an x and y. I thought I had already clobbered those. What is going on? How do I completely clear a workspace?

like image 962
stevejb Avatar asked Aug 21 '10 02:08

stevejb


People also ask

What does RM list ls ()) mean?

Command rm(list=ls()) means- list=ls() is base in this command that means you are referring to all the objects present in the workspace. similarly, rm() is used to remove all the objects from the workspace when you use list=ls() as base.

How do I clear an entire workspace in R?

The console can be cleared using the shortcut key “ctrl + L“.

What is use of RM list Ls in R?

The ls() code lists all of the objects in your workspace. The rm() code removes objects in your workspace. You can begin your code with the rm() function to clear all of the objects from your workspace to start with a clean environment. This way the workspace is empty and everything you create is clearly visible.

What does RM () do in R?

The rm() function in R is used to delete or remove a variable from a workspace.


2 Answers

attach() does not make copies of x and y in your global environment, it attaches a dataframe to the search path.

From ?attach:

The database is not actually attached.  Rather, a new environment  is created on the search path and the elements of a list  (including columns of a data frame) or objects in a save file or  an environment are _copied_ into the new environment.  If you use  ‘<<-’ or ‘assign’ to assign to an attached database, you only  alter the attached copy, not the original object.  (Normal  assignment will place a modified version in the user's workspace:  see the examples.)  For this reason ‘attach’ can lead to  confusion. 

For example:

> search() [1] ".GlobalEnv"        "package:stats"     "package:graphics"  [4] "package:grDevices" "package:utils"     "package:datasets"  [7] "package:methods"   "Autoloads"         "package:base"      > a <- data.frame(stuff=rnorm(100)) > search() [1] ".GlobalEnv"        "package:stats"     "package:graphics"  [4] "package:grDevices" "package:utils"     "package:datasets"  [7] "package:methods"   "Autoloads"         "package:base"      > attach(a) > search()  [1] ".GlobalEnv"        "a"                 "package:stats"      [4] "package:graphics"  "package:grDevices" "package:utils"      [7] "package:datasets"  "package:methods"   "Autoloads"         [10] "package:base"      > rm(list=ls()) > search()  [1] ".GlobalEnv"        "a"                 "package:stats"      [4] "package:graphics"  "package:grDevices" "package:utils"      [7] "package:datasets"  "package:methods"   "Autoloads"         [10] "package:base"      > stuff   [1] -0.91436377  0.67397624  0.62891651 -0.99669584  2.07692590 -0.62702302   [...] > detach(a) > search() [1] ".GlobalEnv"        "package:stats"     "package:graphics"  [4] "package:grDevices" "package:utils"     "package:datasets"  [7] "package:methods"   "Autoloads"         "package:base"     
like image 182
Vince Avatar answered Oct 02 '22 14:10

Vince


Just to mention... if you, perhaps, have hidden objects in your environment, like .First and .Last functions, you can remove them with rm(list = ls(all.names = TRUE)). But in your case, use detach(objectname) to remove object from search path. detach() will remove any object in position #2, since .GlobalEnv cannot be removed (and base too). With detach() you can unload previously loaded packages, so be careful (though you can always load them with library(packagename)).

like image 27
aL3xa Avatar answered Oct 02 '22 14:10

aL3xa