From hb at stat.berkeley.edu  Thu Jul  8 09:20:11 2010
From: hb at stat.berkeley.edu (Henrik Bengtsson)
Date: Thu, 8 Jul 2010 09:20:11 +0200
Subject: [Rd] pass-by-reference
In-Reply-To: <AANLkTil0RDbUb5LydnddH2OG5YLsZyxGYF8-wm1FxMnq@mail.gmail.com>
References: <1278564749228-2281802.post@n4.nabble.com>
	<AANLkTil0RDbUb5LydnddH2OG5YLsZyxGYF8-wm1FxMnq@mail.gmail.com>
Message-ID: <AANLkTimaPEMLCRv6qSCA1d7y0BWw0Frw7D831cMdpAPm@mail.gmail.com>

...and for tracing memory allocations/duplications, see tracemem().

/Henrik

On Thu, Jul 8, 2010 at 9:14 AM, Henrik Bengtsson <hb at stat.berkeley.edu> wrote:
> See packages R.oo and proto.
>
> If you wish to do it yourself, you want to utilize environments for this.
>
> /Henrik
>
> On Thu, Jul 8, 2010 at 6:52 AM, Paul Bailey <pdbailey at umd.edu> wrote:
>>
>> I'm working with a large object that I want to modify slightly in a function.
>> Pass-by-reference would make a lot of sense, but I don't know how to do it.
>>
>> I've searched this archive and thought that I can do something like
>>
>> f <- function(x) {
>> ?v1 <- list(a=x,b=3)
>> ?g(x)
>> ?v1
>> }
>> g <- function(x) {
>> ?frame <- parent.frame()
>> ?assign("v1",list(a=x,b=x),frame)
>> }
>> f(4)
>> returns list(a=4,b=4)
>>
>> but what if I wanted to make v1[[1]] = v1[[1]] + v1[[2]] without creating a
>> copy of v1?
>>
>> f2 <- function(x) {
>> ?v1 <- list(a=x,b=3)
>> ?g2(x)
>> ?v1
>> }
>> g2 <- function(x) {
>> ?frame <- parent.frame()
>> ?v1 <- get("v1",envir=frame)
>> ?v1[[1]] <- v1[[1]] + v1[[2]]
>> }
>> f2(4)
>>
>> but this fails. (it returns list(a=4,b=3) because v1 was copied into g2, not
>> passed by reference) Is there a way to do this?
>> --
>> View this message in context: http://r.789695.n4.nabble.com/pass-by-reference-tp2281802p2281802.html
>> Sent from the R devel mailing list archive at Nabble.com.
>>
>> ______________________________________________
>> R-devel at r-project.org mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-devel
>>
>



[Rd] pass-by-reference
Henrik Bengtsson