Doh! I never thought about nesting functions. Thanks a bunch! Chillu
On 6/19/10, Duncan Murdoch <murdoch.dun...@gmail.com> wrote: > On 19/06/2010 10:32 AM, Chidambaram Annamalai wrote: >> I have written code to compute multi-indices in R [1] and due to the >> recursive nature of the computation I need to pass around the *same* >> matrix object (where each row corresponds to one multi-index). As pass >> by reference wasn't the default behavior I declared a global matrix >> (mat) and used the <<- operator to write to the global matrix. So the >> usage would be to call genMultiIndices(3,2) for side effects to >> generate all multi-indices of length 3 and sum 2. And then access the >> global matrix. >> >> However, after coding this I can't seem to export the global matrix >> object (in the NAMESPACE file) and still retain mutability since its >> binding is "locked" (R throws an error). Can I somehow unlock this? >> >> Ideally I would want to pass around the same matrix to the recursive >> function. Is that possible? If not, could someone please suggest a >> workaround to use the code in an R package? > > > If you pass the object to multiple functions it will only create a new > copy when necessary due to modifying it, so the cost of passing it down > to every recursive call is not so large as you seem to think. But it's > not zero cost, passing arguments to functions costs a little bit. > > You can avoid this using nested functions and <<- as you had before. > That is, instead of making your recursive function a top level function > so that <<- assigns into the namespace environment (which is what's > causing the error), make it a nested function within another, and do > your assignments to the outer frame. For example, > > outer <- function(args) { > > mat <- matrix(NA, 3,3) > > recursive <- function() { > mat <<- newvalue # does the assignment into outer's frame > if (!stop) recursive() > } > > } > > Duncan Murdoch > ______________________________________________ R-help@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.