[R] colSums in C

Prof Brian Ripley ripley at stats.ox.ac.uk
Tue Dec 18 20:19:32 CET 2001


On Tue, 18 Dec 2001, David Brahm wrote:

> I wrote:
> > I asked how to write speedy C code to implement colSums()...
> > I've taken Doug [Bates]'s code, added names to the result, and included an
> > na.rm flag.  Unfortunately, my na.rm option makes it really slow again
> > ... no faster than pre-processing the matrix with "m[is.na(m)] <- 0".
>
> Well, I'm an idiot.  I had forgotten to remove the R code that does that
> pre-processing, so no wonder it wasn't any faster!  After fixing that, I got
> results closer to those reported by Thomas Lumley, about 2.18s with ISNA, and
> even faster (1.41s) with isnan (Peter Dalgaard's suggestion).  Is there any
> reason to distrust isnan()?

Portability.  Not all possible ports of R have it, and R can be built
without it.  But there are macros to cover that.

> Current colSums code is included below, and there's a rowSums too.  I'm still
> prettying it up, but I'd like to open discussion on what to do with it when
> it's ready for prime time:
>   1) I can just use it locally and be perfectly happy,
>   2) I can upload to CRAN (with Doug's permission, of course),
>   3) I believe Doug Bates and Kurt Hornik once discussed modifying apply() to
>      catch these special cases and use the optimized code.  Dangerous?

Yes. You coerce the summands to be numeric: you want at least to handle
the complex case, and it is probably worth handling separately the
integer/logical case too.

colSums is an S-PLUS function (somewhat more general than this one), and
one of a family {cols,rows}{Means,Sums,Vars,Stdev}.  My guess is that
it is worth including at least the Means and Vars version is a future R.

-- 
Brian D. Ripley,                  ripley at stats.ox.ac.uk
Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
University of Oxford,             Tel:  +44 1865 272861 (self)
1 South Parks Road,                     +44 1865 272860 (secr)
Oxford OX1 3TG, UK                Fax:  +44 1865 272595

-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
r-help mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !)  To: r-help-request at stat.math.ethz.ch
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._



More information about the R-help mailing list