The history is open for all to see. E.g. from the NEWS file (ONEWS in pre-2.12.0) entry for R 2.4.0

    o   There is a new primitive seq.int() which is slightly more
        restricted than seq() but often very much faster, and new
        primitives seq_along() and seq_len() which are faster still.

It isn't just complex values: seq.default() dispatches on methods for e.g. arithmetic so is potentially quite a lot more general. And if you look back, seq() was in R 'for ever' as an interpreted generic function -- its peculiarities are taken from blue-book S (although not necessarily documented there).

We provide faster versions for use where needed -- but it is rather rare that seq() takes up more than a tiny proportion of the run time of an R task (and we do provide tools to find out). Those faster versions are used in R's own code where suitable (and as I discovered recently, in a couple of places where not).

On Wed, 29 Sep 2010, Radford Neal wrote:

I wonder what is the history of "seq" and "seq.int"?

From "help(seq)", one reads that "'seq.int' is an internal generic
which can be much faster but has a few restrictions".  And indeed,
"seq.int(1,99,by=2)" is over 40 times faster than "seq(1,99,by=2)" in
a quick test I just did.  This is not surprising given that "seq" is
written in R whereas "seq.int" is a primitive written in C.  The only
documented restriction on "seq.int" that I can see is that it won't
produce complex-valued sequences.

It would be nice if the 40-times-faster version could replace the slow
version, if it can be made to do the same thing.  But is there some
reason I don't see that this makes this hard?  Was the C version the
original, and then someone decided that complex number support was
essential, and most easily obtained by translating it to R?  (The R
code and C code are very parallel, so there was certainly a
translation rather a rewrite one way or the other.)  Or was the
original in R, and someone rewrote it in C for speed, but stopped just
short of being able to replace the R version with the C version
because they didn't implement complex-valued sequences?  Or is there
some other feature that's missing from seq.int?

--
Brian D. Ripley,                  rip...@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 272866 (PA)
Oxford OX1 3TG, UK                Fax:  +44 1865 272595

______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to