[Rd] R interface to C API Rf_logspace_{add,sub}?
Martin Maechler
maechler at stat.math.ethz.ch
Mon Nov 11 19:03:50 CET 2013
>>>>> William Dunlap <wdunlap at tibco.com>
>>>>> on Thu, 7 Nov 2013 21:32:46 +0000 writes:
> Is there an R-language interface to the R API C-language
> functions Rf_logspace_add() and Rf_logspace_sub()? I
> don't see one but I may not looking under the right name.
> Various packages have functions which do that same sort of
> thing (log(exp(x)+exp(y)) and log(exp(x)-exp(y)) without
> unnecessary floating point errors). They have names like
> matrixStats::logSumExp(lx, na.rm=FALSE, ...) (the ... is
> ignored by the function) sna::logSub(x,y), logSum(x),
> logMean(x) BTYD::addLogs(loga, logb) and subLogs(loga,
> logb) Googling for logSumExp (the Python name) indicates
> that many know this as "LSE" (the "Log-Sum-Exp trick").
> I've seen several instances in R-help recently where user
> code could be made more accurate if these were available.
> They can be written in pure R code, but would be slower
> because they would require something like pmin() and
> pmax() to work. I think they belong in the same package
> as log1p() and expm1(). I think the add and subtraction
> versions are the most useful and the sum version would be
> very nice to have.
I agree.... As a matter of fact,
Marius Hofert and I have been using pure R "vectorized", i.e.,
working on a *matrix* argument, returning a vector,
versions of these in our package 'copula'
(--> copula/R/special-func.R ),
not exported though,
however somewhat documented and explained on page 49 of
M Hofert, M Mächler, AJ McNeil (2013)
Archimedean Copulas in High Dimensions:
Estimators and Numerical Challenges Motivated by Financial Applications
Journal de la Société Française de Statistique 154 (1), 25-63
p.49 is also attached.
The clue is that the lssum() function is really an n-term
generalization of logspace_add() and logspace_sub()
by being able to specifying the *signs* and lsum() is a special
case with all signs being +1.
Before jumping ahead and providing a faster R interface in
"base" (or rather "utils" ?), I think we should think twice
before embarking on a 2-argument version only rather than a
vectorized version as our lsum() and lssum() provide.
Martin Maechler, ETH Zurich
-------------- next part --------------
A non-text attachment was scrubbed...
Name: HoMaMcN2013-p49.pdf
Type: application/pdf
Size: 117551 bytes
Desc: not available
URL: <https://stat.ethz.ch/pipermail/r-devel/attachments/20131111/bc142e21/attachment.pdf>
-------------- next part --------------
> Bill Dunlap Spotfire, TIBCO Software wdunlap tibco.com
More information about the R-devel
mailing list