What is the use case for attach? As the Help says, I find that with()
or sometimes within() handles the situations where I would use it.

Bert Gunter

"The trouble with having an open mind is that people keep coming along
and sticking things into it."
-- Opus (aka Berkeley Breathed in his "Bloom County" comic strip )

On Mon, Apr 27, 2020 at 7:58 AM Fox, John <j...@mcmaster.ca> wrote:
>
> Dear Edward,
>
> Paragraph 4 in the help page goes on to say, "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."
>
> That seems reasonably clear to me. Here's an example that also illustrates 
> how attach can lead to confusion:
>
> ------- snip --------
>
> > str(cars)
> 'data.frame':   50 obs. of  2 variables:
>  $ speed: num  4 4 7 7 8 9 10 10 10 11 ...
>  $ dist : num  2 10 4 22 16 10 18 26 34 17 ...
>
> > attach(cars)
>
> > search()
>  [1] ".GlobalEnv"        "cars"              "tools:rstudio"     
> "package:stats"
>  [5] "package:graphics"  "package:grDevices" "package:utils"     
> "package:datasets"
>  [9] "package:methods"   "Autoloads"         "package:base"
>
> > objects()
> character(0)
>
> > objects(pos=2)
> [1] "dist"  "speed"
>
> > str(get("dist", pos=2))
>  num [1:50] 2 10 4 22 16 10 18 26 34 17 ...
>
> > dist <- 1:10
>
> > head(dist) # shadows dist in copy of cars
> [1] 1 2 3 4 5 6
>
> > head(get("dist", pos=2))
> [1]  2 10  4 22 16 10
>
> > assign("dist", 10:1, pos=2) # changes dist in objects copied from cars
>
> > head(get("dist", pos=2))
> [1] 10  9  8  7  6  5
>
> ------- snip --------
>
> Paragraph 5 also seems clear to me. Here's an example:
>
> ------- snip --------
>
> > attach(NULL)
>
> > search()
>  [1] ".GlobalEnv"        "NULL"              "cars"              
> "tools:rstudio"
>  [5] "package:stats"     "package:graphics"  "package:grDevices" 
> "package:utils"
>  [9] "package:datasets"  "package:methods"   "Autoloads"         
> "package:base"
>
> > assign("x", 10, pos=2)
>
> > x
> [1] 10
>
> ------- snip --------
>
> Now that may beg the question of why one would want to do something like 
> this, which isn't addressed in the help file, but a fair comment is that if 
> you don't need to store objects in an environment that's accessible on the 
> path, why worry about it? After all, no one is forcing you to use this trick.
>
> Finally, I too recommended that students use attach() when I first starting 
> teaching with R, until I noticed that they frequently tied themselves into 
> knots by attaching different versions of the same data during a session, 
> producing confusion about where the data were coming from and what version 
> they were using. It's not hard in R to avoid the use of attach(). Of course, 
> attach() is still part of the language, so you, and your students, are free 
> to continue using it if you wish, and perhaps your students avoid the 
> problems that mine often created.
>
> Best,
>  John
>
>   -----------------------------
>   John Fox, Professor Emeritus
>   McMaster University
>   Hamilton, Ontario, Canada
>   Web: http::/socserv.mcmaster.ca/jfox
>
> > On Apr 27, 2020, at 9:26 AM, Edward McNeil <edwar...@psu.ac.th> wrote:
> >
> > Dear Petr,
> > Thanks for your quick reply. Much appreciated. However, you haven't really 
> > answered
> > either of my questions, although I don't quite understand your reference to 
> > La Gioconda.
> >
> > In any case, despite your strong recommendation not to use `attach`, I am 
> > going to keep
> > using it, as I have done successfully for the past 16 years, and keep 
> > teaching it, until
> > it either kills me or disappears from R. Unfortunately I have to teach R to 
> > students and
> > I don't like it when they ask me "tricky" questions to which I have no 
> > answer. ;)
> > --
> > Edward McNeil
> >
> > On Mon, April 27, 2020 8:00 pm, PIKAL Petr wrote:
> > Hi.
> >
> > I strongly recommend not to use attach. I agree that mentioned statements 
> > are rather
> > contradictory and probably others could give you more insightful answer. 
> > You could
> > consider that by attaching some data, you create something like a copy of 
> > original data
> > in your system with a feature that you can use column names directly. If 
> > you change
> > something in the data after attachment, you change only attached version 
> > and not an
> > original.
> >
> > It is similar as if you take a picture of Gioconda an use some creativity 
> > to add a
> > moustache to this picture. In any circumstances moustache does not 
> > propagate to the
> > original Louvre painting. Do not perform any tricks, preferably do not 
> > perform attach.
> >
> > Cheers
> > Petr
> >
> >> -----Original Message-----
> >> From: R-help <r-help-boun...@r-project.org> On Behalf Of Edward McNeil
> >> Sent: Monday, April 27, 2020 2:07 PM
> >> To: r-help@r-project.org
> >> Subject: [R] deciphering help for `attach`
> >>
> >> Hi,
> >> I have two related questions.
> >>
> >> 1. In the help page for `attach` under "Details" it says in paragraph 3:
> >> "By default the database is attached ..."
> >>
> >> But then paragraph 4 starts: "The database is not actually attached."
> >>
> >> Could somebody explain this contradiction? Is the data(base) attached or
> >> not?
> >>
> >> 2. What is meant by the 5th paragraph: "One useful ‘trick’ is to use what =
> >> NULL (or equivalently a length-zero list) to create a new environment on 
> >> the
> >> search path into which objects can be assigned by `assign` ... "?
> >>
> >> I don't understand what this "trick" is or why a "trick" needs to be 
> >> performed
> >> here.
> >>
> >> Thanks
> >> --
> >> Edward McNeil
> >>
> >> ______________________________________________
> >> R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
> >> https://stat.ethz.ch/mailman/listinfo/r-help
> >> PLEASE do read the posting guide http://www.R-project.org/posting-
> >> guide.html
> >> and provide commented, minimal, self-contained, reproducible code.
> >
> > ______________________________________________
> > R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
> > https://stat.ethz.ch/mailman/listinfo/r-help
> > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> > and provide commented, minimal, self-contained, reproducible code.
>
>
>
>
> ______________________________________________
> R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.

______________________________________________
R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to