sort() generic? [Re: Suspicious behaviour of sort on POSIXct ..]
On Wed, 7 Jun 2006, Martin Maechler wrote:
{Diverted to R-devel}
"BDR" == Prof Brian Ripley <ripley at stats.ox.ac.uk>
on Tue, 6 Jun 2006 21:14:01 +0100 (BST) writes:
BDR> On Tue, 6 Jun 2006, patrick.guevel at uk.bnpparibas.com BDR> wrote:
>> Hi , >> >> When I sort a vector of POSIXct values in R-2.3.0 and >> R-2.3.1, I get a vector of numeric values and this gets >> some of my code to crash (class object creation). Is that >> a R bug?
BDR> No, it is as documented: see ?sort BDR> As from R 2.3.0, all attributes are removed from BDR> the return value except names, which are sorted. (If BDR> 'partial' is specified even the names are removed.) BDR> Note, the class is an attribute. For many classes BDR> sorting destroys the appropriateness of the class.
(An example BTW is a time series: the times associated with values would be shuffled on sorting.)
Indeed, and I agree this a good change.
However, the above also suggests that ideally, sort() would be
a generic function.
One good reason for sort() not being generic now is the fact
that method dispatch costs a bit, *and* that we like sort() to
be really fast.
One way to achieve a generic sort() and keep the possibility of
of very fast sort() --- similarly to rep() and rep.int()
would be to rename the current sort into something like
sortNum() {"Num" for numeric}, make sort() into a generic,
and replace sort() by sortNum() in those code parts which need
to remain optimally fast.
The current sort handles much more than numeric vectors. I agree with reasoning, but it seems wrong to ask all those using sort() in packages to rename their usages (conditional on R >= 2.4.0) not to be penalized. sort() is an interface to three C functions. It ought to be possible to use internal dispatch for internal sort and (not for psort or qsort), for which I believe the overhead would be acceptable. I think that is acceptable: people who set partial or method must have read the help page.
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 272866 (PA) Oxford OX1 3TG, UK Fax: +44 1865 272595