[R] Cacheing computationally expensive getter methods for S4 objects

Steve Lianoglou mailinglist.honeypot at gmail.com
Wed Oct 14 20:31:22 CEST 2009


Hi,

I was wondering if there was a way to store the results of a  
computationally expensive "getter" call on an S4 object, so that it is  
only calculated once for each object.

Trivial example: let's say I want to cache the "expensive" area  
calculation of a square object.

setClass("Square",
   representation(
     length='numeric',
     width='numeric',
     area='numeric'
   ),
   prototype(
     length=0,
     width=0,
     area=-1
   )
)

setGeneric("area", function(x) standardGeneric("area"))
setMethod("area", "Square",
function(x) {
   if (x at area == -1) {
     x at area <- x at width * x at height
   }
   x at area
})

Now the first time I call ``area(my.square)`` it computes  
``my.square at width * my.square at height``, but each subsequent call  
returns ``x at area`` since the area computation has already been calc'd  
and set for this object.

Is this possible? I'm guessing the R pass by value semantics is going  
to make this one difficult ... is there some S4 reference I missed  
that has this type of info from?

Thanks,
-steve

--
Steve Lianoglou
Graduate Student: Computational Systems Biology
   |  Memorial Sloan-Kettering Cancer Center
   |  Weill Medical College of Cornell University
Contact Info: http://cbio.mskcc.org/~lianos/contact




More information about the R-help mailing list