[R] environment

Gabor Grothendieck ggrothendieck at gmail.com
Wed Apr 26 13:42:07 CEST 2006


Also, if you don;t need to create child objects which override .x,
and I don't think you do here, p could be further simplified to
this (only the print statement has been changed):

p <- proto(.x = 2, g = function(.) { print(.x); .$.x <- 3 })


On 4/26/06, Gabor Grothendieck <ggrothendieck at gmail.com> wrote:
> A third possibility is to using the proto package and define
> a proto object (an environment with special meaning for $)
> containing the two components .x and g like this:
>
> library(proto)
> p <- proto(.x = 2, g = function(.) { print(.$.x); .$.x <- 3 })
> p$.x  # 2
> print(p$g())  # 2, 3
> p$.x # 3
>
> or you can write the print statement as with(., print(.x))
>
> On 26 Apr 2006 11:02:58 +0200, Peter Dalgaard <p.dalgaard at biostat.ku.dk> wrote:
> > Romain Francois <francoisromain at free.fr> writes:
> >
> > > Hi,
> > >
> > > Consider the code :
> > >
> > > g <- function(){
> > >   print(.x)
> > >  .x <- 3
> > > }
> > >
> > > f <- function(){
> > >   environment(g) <- environment()
> > >   .x <- 2
> > >   g()
> > >   .x
> > > }
> > >
> > >  > f()
> > > [1] 2
> > > [1] 2
> > >
> > >
> > > I would like f() to return 3. How can I do that ? Am I completely out of
> > > place ?
> > > Doing that, I want to avoid to pass .x as a parameter in f, because in
> > > real life .x is pretty big and g() is called over and over in a loop.
> >
> > If you want to assign into the environment of g, you'll need <<- ,
> > otherwise you  assign to a local variable.
> >
> > Another possibility involves assign(..., parent.frame())
>
> And a third possibility is:
>
> library(proto)
>




More information about the R-help mailing list