From: Robert Gentleman <rgentlem_at_fhcrc.org>

Date: Wed 13 Dec 2006 - 23:05:46 GMT

>> 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
*

*>> rgentlem@fhcrc.org
*

>

Date: Wed 13 Dec 2006 - 23:05:46 GMT

e1 = new.env(hash=TRUE)

e1[["1"]] = whateveryouwant

ie. just transform to characters, but I don't see why you want to do that - surely there are more informative names to be used -

Tamas K Papp wrote:

> 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

>

-- 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 rgentlem@fhcrc.org ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-develReceived on Thu Dec 14 15:25:43 2006

Archive maintained by Robert King, hosted by
the discipline of
statistics at the
University of Newcastle,
Australia.

Archive generated by hypermail 2.1.8, at Thu 14 Dec 2006 - 04:30:59 GMT.

*
Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-devel.
Please read the posting
guide before posting to the list.
*