From: Tamas K Papp <tpapp_at_princeton.edu>

Date: Wed 13 Dec 2006 - 21:17:29 GMT

*}
*

R-devel@r-project.org mailing list

https://stat.ethz.ch/mailman/listinfo/r-devel Received on Thu Dec 14 08:24:50 2006

Date: Wed 13 Dec 2006 - 21:17:29 GMT

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 Received on Thu Dec 14 08:24:50 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 Sun 17 Dec 2006 - 01:31:01 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.
*