From ross at biostat.ucsf.edu  Thu May 18 20:23:40 2006
From: ross at biostat.ucsf.edu (Ross Boylan)
Date: Thu, 18 May 2006 11:23:40 -0700
Subject: [Rd] Recommended style with calculator and persistent data
Message-ID: <1147976620.10544.43.camel@iron.psg.net>

I have some calculations that require persistent state.  For example,
they retain most of the data across calls with different parameters.
They retain parameters across calls with different subsets of the cases
(this is for distributed computation).  They retain early analysis of
the problem to speed later computations.

I've created an S4 object, and the stylized code looks like this
calc <- makeCalculator(a, b, c)
calc <- setParams(calc, d, e)
calc <- compute(calc)
results <- results(calc)
The client code (such as that above) must remember to do the
assignments, not just invoke the functions.

I notice this does not seem to be the usual style, which is more like
results <- compute(calc)

and possibly using assignment operators like
params(calc) <- x
(actually, I have a call like that, but some of the updates take
multiple arguments).

Another route would be to use lexical scoping to bundle all the
functions together (umm, I'm not sure how that would work with S4
methods) to ensure persistence without requiring assignment by the
client code.  Obviously this would decrease portability to S, but I'm
already using lexical scope a bit.

Is there a recommended R'ish way to approach the problem?  My current
approach works, but I'm concerned it is non-standard, and so would be
unnatural for users.
-- 
Ross Boylan                                      wk:  (415) 514-8146
185 Berry St #5700                               ross at biostat.ucsf.edu
Dept of Epidemiology and Biostatistics           fax: (415) 514-8150
University of California, San Francisco
San Francisco, CA 94107-1739                     hm:  (415) 550-1062



[Rd] Recommended style with calculator and persistent data
Ross Boylan