From gavin.simpson at ucl.ac.uk  Wed Mar 21 23:24:12 2012
From: gavin.simpson at ucl.ac.uk (Gavin Simpson)
Date: Wed, 21 Mar 2012 22:24:12 +0000
Subject: [Rd] Why is there no within.environment function?
In-Reply-To: <E66794E69CFDE04D9A70842786030B9328AE11@PA-MBX04.na.tibco.com>
References: <CAPp_+=dLEZzw+ENwTkNmWz-cKZXpQ67NwwUje6EqxWLwMuBufA@mail.gmail.com>
	<E66794E69CFDE04D9A70842786030B9328AE11@PA-MBX04.na.tibco.com>
Message-ID: <1332368652.2002.5.camel@chrysothemis.geog.ucl.ac.uk>

On Wed, 2012-03-21 at 22:01 +0000, William Dunlap wrote:
> Wouldn't within.environment be identical to with.environment?
>   > e <- new.env()
>   > with(e, { One <- 1 ; Two <- 2+2i ; Theee <- One + Two })
>   > objects(e)
>   [1] "One"   "Theee" "Two"
> It might make the transition between lists and environments
> simpler if within.environment  existed.
> 
> Bill Dunlap
> Spotfire, TIBCO Software
> wdunlap tibco.com

One doesn't normally think of `with()` as changing it's `data` argument,
which might be one reason the connection to `with.environment()` was not
made here.

> d <- data.frame()
> with(d, {
+ A <- 1:3
+ B <- 1:3
+ })
> d
data frame with 0 columns and 0 rows

The behaviour of `with.environment()` makes sense once you think about
it as there is only one environment `e` (from your example), and when it
is updated during the call to `with()` it isn't a copy that is being
updated but the real thing. So I can see why it was overlooked.

G

> 
> > -----Original Message-----
> > From: r-devel-bounces at r-project.org [mailto:r-devel-bounces at r-project.org] On Behalf
> > Of Richard Cotton
> > Sent: Wednesday, March 21, 2012 2:51 PM
> > To: r-devel at r-project.org
> > Subject: [Rd] Why is there no within.environment function?
> > 
> > If I want to assign some variables into an environment, it seems
> > natural to do something like
> > 
> > e <- new.env()
> > within(e,
> >     {
> >       x <- 1:5
> >       y <- runif(5)
> >     }
> > )
> > 
> > This throws an error, since within.environment doesn't exist.  I
> > realise I can work around it using
> > 
> > as.environment(within(as.list(e),
> >     {
> >       x <- 1:5
> >       y <- runif(5)
> >     }
> > ))
> > 
> > Just wondering why I can't use within directly with environments.
> > 
> > --
> > 4dpiecharts.com
> > 
> > ______________________________________________
> > R-devel at r-project.org mailing list
> > https://stat.ethz.ch/mailman/listinfo/r-devel
> ______________________________________________
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel

-- 
%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%
 Dr. Gavin Simpson             [t] +44 (0)20 7679 0522
 ECRC, UCL Geography,          [f] +44 (0)20 7679 0565
 Pearson Building,             [e] gavin.simpsonATNOSPAMucl.ac.uk
 Gower Street, London          [w] http://www.ucl.ac.uk/~ucfagls/
 UK. WC1E 6BT.                 [w] http://www.freshwaters.org.uk
%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%



[Rd] Why is there no within.environment function?
Gavin Simpson