From: Tamas K Papp <tpapp_at_Princeton.EDU>

Date: Wed 13 Dec 2006 - 22:56:32 GMT

R-devel@r-project.org mailing list

https://stat.ethz.ch/mailman/listinfo/r-devel Received on Thu Dec 14 15:25:38 2006

Date: Wed 13 Dec 2006 - 22:56:32 GMT

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
**> rgentlem@fhcrc.org
*

R-devel@r-project.org mailing list

https://stat.ethz.ch/mailman/listinfo/r-devel Received on Thu Dec 14 15:25:38 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.
*