Re: [R] *not* using attach() *but* in one case ....

From: Duncan Murdoch <murdoch.duncan_at_gmail.com>
Date: Thu, 19 May 2011 11:24:03 -0400

On 19/05/2011 10:34 AM, Liaw, Andy wrote:
> From: Prof Brian Ripley
> >
> > Hmm, load() does have an 'envir' argument. So you could simply use
> > that and with() (which is pretty much what attach() does internally).
> >
> > If people really wanted a lazy approach, with() could be extended to
> > allow file names (as attach does).
>
> I'm not sure if laziness like this should be encouraged.
>
> If I may bring up another "black hole": IMHO the formula interface
> allows too much flexibility (perhaps to allow some laziness?) that
> beginners and even non-beginners fall into its various traps a bit too
> often, and sometimes not even aware of it. It would be great if there's
> a way to (optionally?) limit the scope of where a formula looks for
> variables.

I think there is: put the variables in an environment that doesn't have parents covering everything visible, and use that as the environment of the formula.

For example, you could follow

x <- 1:10
y <- rnorm(10)
z <- rnorm(10)
f <- y ~ x + z

with

e <- new.env(parent=baseenv())
e$x <- x
e$y <- y
environment(f) <- e

and you'll get a failure with

lm(f)

because it can't find z. Obviously this could be wrapped in a friendlier function if you really wanted it.

Duncan Murdoch

>
> Just my $0.02...
>
> Andy
>
> > On Thu, 19 May 2011, Martin Maechler wrote:
> >
> > > [modified 'Subject' on purpose;
> > > Good mail readers will still thread correctly, using the
> > 'References'
> > > and 'In-Reply-To' headers, however, unfortunately,
> > > in my limited experience, good mail readers seem to
> > disappear more and more ..
> > > ]
> > >
> > >>>>>> Peter Ehlers<ehlers_at_ucalgary.ca>
> > >>>>>> on Tue, 17 May 2011 06:08:30 -0700 writes:
> > >
> > > > On 2011-05-17 02:22, Timothy Bates wrote:
> > > >> Dear Bryony: the suggestion was not to change the name of
> > > >> the data object, but to explicitly tell glm.nb what
> > > >> dataset it should look in to find the variables you
> > > >> mention in the formula.
> > > >>
> > > >> so the salient difference is:
> > > >>
> > > >> m1<- glm.nb(Cells ~ Cryogel*Day, data = side)
> > > >>
> > > >> instead of
> > > >>
> > > >> attach(side) m1<- glm.nb(Cells ~ Cryogel*Day)
> > > >>
> > > >> This works for other functions also, but not uniformly as
> > > >> yet (how I wish it did and I could say hist(x, data=side)
> > > >> Instead of hist(side$x)
> > > >>
> > > >> this inconsistency encourages the need for attach()
> > >
> > > > Only if the user hasn't yet been introduced to the with()
> > > > function, which is linked to on the ?attach page.
> > >
> > > > Note also this sentence from the ?attach page:
> > > > ".... attach can lead to confusion."
> > >
> > > > I can't remember the last time I needed attach().
> > > > Peter Ehlers
> > >
> > > Well, then you don't know *THE ONE* case where modern users of
> > > R should use attach() ... as I have been teaching for a while,
> > > but seem not have got enought students listening ;-) ...
> > >
> > > --- Use it instead of load() {for save()d R objects} ---
> > >
> > > The advantage of attach() over load() there is that loaded
> > > objects (and there maye be a bunch!), are put into a separate
> > > place in the search path and will not accidentally overwrite
> > > objects in the global "workspace".
> > >
> > > Of course, there are still quite a few situations {e.g. in
> > > typical BATCH use of R for simulations, or Sweaving, etc} where
> > > load() is good enough, and the extras of using attach() are not
> > > worth it.
> > >
> > > But the unconditional "do not use attach()"
> > > is not quite ok,
> > > at least not when you talk to non-beginners.
> > >
> > > Martin Maechler, ETH Zurich
> >
> > --
> > Brian D. Ripley, ripley_at_stats.ox.ac.uk
> > 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_at_r-project.org mailing list
> > 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.
> >
> Notice: This e-mail message, together with any attachme...{{dropped:11}}
>
> ______________________________________________
> R-help_at_r-project.org mailing list
> 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_at_r-project.org mailing list
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. Received on Thu 19 May 2011 - 15:30:36 GMT

This quarter's messages: by month, or sorted: [ by date ] [ by thread ] [ by subject ] [ by author ]

All messages

Archive maintained by Robert King, hosted by the discipline of statistics at the University of Newcastle, Australia.
Archive generated by hypermail 2.2.0, at Thu 19 May 2011 - 15:40:07 GMT.

Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-help. Please read the posting guide before posting to the list.

list of date sections of archive