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.