From pdbailey at umd.edu  Thu Jul  8 06:52:29 2010
From: pdbailey at umd.edu (Paul Bailey)
Date: Wed, 7 Jul 2010 21:52:29 -0700 (PDT)
Subject: [Rd] pass-by-reference
Message-ID: <1278564749228-2281802.post@n4.nabble.com>


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.



[Rd] pass-by-reference
Paul Bailey