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?
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.
The console can be cleared using the shortcut key “ctrl + L“.
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.
The rm() function in R is used to delete or remove a variable from a workspace.
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"
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)
).
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With