Re: [R] Suggestion on how to make permanent changes to a single object in a list?

From: Gabor Grothendieck <ggrothendieck_at_gmail.com>
Date: Thu, 3 Jan 2008 17:25:02 -0500

You can do it with environments. The first line sets up fooStack with a list of environments instead of a list of lists and the remaining lines are the same as in your post squished to one line each to make it easier to see the entire code at once:

fooStack <- lapply(1:5, new.env)
fooModifier <- function( foo ) foo$bar <- "bar" fooModifier( fooStack[[ 1 ]] )
fooStack[[1]]$bar # "bar"

You may need to be a bit careful if you pursue this line of reasoning as there is a long standing bug in R relating to lists of promises so take care that you don't get promises in the list. See point #2 in: https://stat.ethz.ch/pipermail/r-devel/2008-January/047914.html

Also you might want to look at the proto package which reframes the use of environments in terms of object oriented programming. http://r-proto.googlecode.com

On Jan 3, 2008 4:35 PM, Peter Waltman <waltman_at_cs.nyu.edu> wrote:
>
> specifically, imagine we have:
>
> fooStack <- list()
> for ( i in 1:5 )
> fooStack[[i]] <- list()
>
> and we have a function:
>
> fooModifier <- function( foo ) {
>
> foo$bar <- "bar"
>
> }
>
> then, if we invoke fooModifier, i.e.:
>
> fooModifier( fooStack[[ 1 ]] )
>
> the $bar elt is only set in the scope of the function, and if we use the
> "<<-" modifier in fooModifier, R will throw an error b/c it can't find the
> "foo" object. I have to say that for someone coming from languages that
> have pointers and/or references, it's really frustrating that R fails to
> allow one to have direct access to the objects' memory space.
> Onyway, one workaround would be to pass in the whole fooStack object and the
> index of the elt that you want to modify to the fooModifier fn, but I'd
> rather not have to pass the whole thing in.
> Any suggestions?
> Thanks!
> Peter Waltman
> ______________________________________________
> 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 03 Jan 2008 - 22:28:34 GMT

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 Fri 04 Jan 2008 - 00:30:05 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