On Thu, 14 Apr 2005, Liaw, Andy wrote:

I suspect you've attach()'ed `DF' multiple times in your
code (possibly inside a loop, or perhaps a function that
was called several times).  Note that if it were a
`package', it would show up in search() as `package:DF'
rather than just `DF'.  Also, R Core folks took care to
avoid attaching the same package multiple times:

library(MASS)
search()
[1] ".GlobalEnv"        "package:MASS"      "package:methods"
"package:stats"
[5] "package:graphics"  "package:grDevices" "package:utils"
"package:datasets"
[9] "Autoloads"         "package:base"
library(MASS)
search()
[1] ".GlobalEnv"        "package:MASS"      "package:methods"
"package:stats"
[5] "package:graphics"  "package:grDevices" "package:utils"
"package:datasets"
[9] "Autoloads"         "package:base"

Notice how trying to load a package that's already on the
search path has no effect.

This is not true for R objects, though.

When you attach a data frame, say, `DF', (or a list), it
places a _copy_ on the search path, so you can access
the variables in the data frame (or components of the
list) directly.  When you make modifications to the
variables (such as x[i] <- something, rather than
DF$x[i] <- something), the modifications are applied to
the _copy_ on the search path, not the original.

Not quite. The correct description is in ?attach (and apart from mentioning attach was used, reading the help before posting is de rigeur).
Here is the version from 2.1.0 beta (which has been expanded):


     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 dataframe) or objects in a save file 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.

Examples:

     summary(women$height)   # refers to variable 'height' in the data frame
     attach(women)
     summary(height)         # The same variable now available by name
     height <- height*2.54   # Don't do this. It creates a new variable
                             # in the user's workspace
     find("height")
     summary(height)         # The new variable in the workspace
     rm(height)
     summary(height)         # The original variable.
     height <<- height*25.4  # Change the copy in the attached environment
     find("height")
     summary(height)         # The changed copy
     detach("women")
     summary(women$height)   # unchanged

Notice the difference between <- and <<- .

Assigning to an element follows the same rules, and in addition is an error unless an object exists that can be suitably subscripted.


-- Brian D. Ripley, [EMAIL PROTECTED] Professor of Applied Statistics, http://www.stats.ox.ac.uk/~ripley/ University of Oxford, Tel: +44 1865 272861 (self) 1 South Parks Road, +44 1865 272866 (PA) Oxford OX1 3TG, UK Fax: +44 1865 272595

______________________________________________
R-help@stat.math.ethz.ch mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html

Reply via email to