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
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"
To use detach() function to remove a specific package from Work Space, it requires the full description for the package.
Example: Remove a package ISwR Answer 1: detach(ISwR) .... Not Work! The Package is still on the Work Space. Answer 2: detach(package:ISwR) .... WORKS! The Package is removed from the Work Space.
You can use:
rm(list=ls())
or:
rm(list=(ls()))
but save your workspace before you close R.
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)
).
R itself says, in the help for rm
:
## remove (almost) everything in the working environment.
## You will get no warning, so don't do this unless you are really sure.
rm(list = ls())
Note the 'almost'. There are different environments.
Did you try detach(values1)
?
Most likely you have at least one other data frame or list attached with x and y columns/components. You can use the "conflicts" function to see all objects that have potential conflicts and use the "find" function to find out where those objects are (the "search" function also helps by showing all the things you have attached).
Your question is a good example of why attaching data frames is being frowned upon, it is better to use functions like "with" or "within" so that you don't have problems from forgetting to detach objects.