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...@area == -1) {
    x...@area <- x...@width * x...@height
  }
  x...@area
})

Now the first time I call ``area(my.square)`` it computes ``my.squ...@width * my.squ...@height``, but each subsequent call returns `...@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

______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to