[R] detach()

Gabor Grothendieck ggrothendieck at myway.com
Mon Mar 22 21:42:07 CET 2004


There is a paper on nonstandard evaluation at:

   http://developer.r-project.org/nonstandard-eval.pdf

that seems relevant here.

Date:   Mon, 22 Mar 2004 16:32:09 -0400 (AST) 
From:   Rolf Turner <rolf at math.unb.ca>
To:   <ripley at stats.ox.ac.uk> 
Cc:   <r-help at stat.math.ethz.ch> 
Subject:   Re: [R] detach() 

 
Dear Brian,

You wrote:

> If that is to be allowed, then it has to take precedence. What would
> you expect if I did
> 
> data(women)
> attach(women)
> women <- 4
> detach(women)

I would basically expect either all hell to break loose, mainly
because of the overwriting of ``women'' or the data base in position
4 to be detached.

If you did

data(women)
attach(women)
melvin <- 4
detach(melvin)

I would again expect the data base in position 4 to be detached.

If, more realistically, you did

melvin <- grep("women",search())
detach(melvin)

I would expect the data set ``women'' to be detached. My
expectations would of course be dashed. The current structure of
detach() seems to me to be a counterintuitive contortion designed to
protect the user from doing something stupid. Maybe that's a good
thing.

> ? I think almost everyone would expect the current behaviour.

     I beg to differ. Only someone who was in on the design
     process and saw the potential pitfall would expect the
     current behaviour.

     It is a rare and subtle phenomenon that

     > foo(42)

     gives a different result from

     > x <- 42
     > foo(x)

> I think the help page should say
> 
> When 'name' is a number, 'pos = name' is used.

     Even that would be totally misleading to the average user.
     None of us would distinguish between providing a numeric
     argument as an absolute constant and providing it as that
     same constant stored in a (scalar numeric) object.

     To make it clear what is going on an example should be
     given:

``When 'name' is an absolute constant, 'pos = name' is used.
     For example:
     > detach(2) # Works.
     > n <- 2
     > detach(n) # Doesn't work.''

                         cheers,

                              Rolf




More information about the R-help mailing list