Hi Robert, Thanks for your answer. I would create and environment with new.env(), but how can I assign and retrieve values based on a numerical index (the derivative)? The example of the help page of assign explicitly shows that assign("a[1]") does not work for this purpose.
Thanks, Tamas On Wed, Dec 13, 2006 at 01:54:28PM -0800, Robert Gentleman wrote: > the idea you are considering is also, at times, referred to as > memoizing. I would not use a list, but rather an environment, and > basically you implement something that first looks to see if there is a > value, and if not, compute and store. It can speed things up a lot in > some examples (and slow them down a lot in others). > > Wikipedia amongst other sources: > http://en.wikipedia.org/wiki/Memoization > > Environments have advantages over lists here (if there are lots of > matrices the lookup can be faster - make sure you use hash=TRUE), and > reference semantics, which you probably want. > > Tamas K Papp wrote: > >Hi, > > > >I am trying to find an elegant way to compute and store some > >frequently used matrices "on demand". The Matrix package already uses > >something like this for storing decompositions, but I don't know how > >to do it. > > > >The actual context is the following: > > > >A list has information about a basis of a B-spline space (nodes, > >order) and gridpoints at which the basis functions would be evaluated > >(not necessarily the nodes). Something like this: > > > >bsplinegrid <- list(nodes=1:8,order=4,grid=seq(2,5,by=.2)) > > > >I need the design matrix (computed by splineDesign) for various > >derivatives (not necessarily known in advance), to be calculated by > >the function > > > >bsplinematrix <- function(bsplinegrid, deriv=0) { > > x <- bsplinegrid$grid > > Matrix(splineDesign(bslinegrid$knots, x, ord=basis$order, > > derivs = rep(deriv,length(x)))) > >} > > > >However, I don't want to call splineDesign all the time. A smart way > >would be storing the calculated matrices in a list inside bsplinegrid. > >Pseudocode would look like this: > > > >bsplinematrix <- function(bsplinegrid, deriv=0) { > > if (is.null(bsplinegrid$matrices[[deriv+1]])) { > > ## compute the matrix and put it in the list bsplinegrid$matrices, > > ## but not of the local copy > > } > > bsplinegrid$matrices[[deriv+1]] > >} > > > >My problem is that I don't know how to modify bsplinegrid$matrices > >outside the function -- assignment inside would only modify the local > >copy. > > > >Any help would be appreciated -- I wanted to learn how Matrix does it, > >but don't know how to display the source with s3 methods (getAnywhere > >doesn't work). > > > >Tamas > > > >______________________________________________ > >R-devel@r-project.org mailing list > >https://stat.ethz.ch/mailman/listinfo/r-devel > > > > -- > Robert Gentleman, PhD > Program in Computational Biology > Division of Public Health Sciences > Fred Hutchinson Cancer Research Center > 1100 Fairview Ave. N, M2-B876 > PO Box 19024 > Seattle, Washington 98109-1024 > 206-667-7700 > [EMAIL PROTECTED] ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel