From ripley at stats.ox.ac.uk  Thu Oct 21 09:34:06 2004
From: ripley at stats.ox.ac.uk (Prof Brian Ripley)
Date: Thu Oct 21 09:34:37 2004
Subject: [Rd] documentation for rank() (PR#7298)
In-Reply-To: <Pine.LNX.4.58.0410202354500.27407@bear.fhcrc.org>
Message-ID: <Pine.LNX.4.44.0410210831220.28725-100000@gannet.stats>

On Thu, 21 Oct 2004, Douglas Grove wrote:

> 
> 
> On Thu, 21 Oct 2004, Prof Brian Ripley wrote:
> 
> > On Wed, 20 Oct 2004, Douglas Grove wrote:
> > 
> > > Oh crap.  So sorry.  This is my fault (obviously).
> > > Prior to the new ties methods being added in 2.0.0
> > > I modified the source to do this myself.  So looks
> > > like I forgot: (1) that my modified code was still
> > > being accessed default (thought I'd removed it) and
> > > (2) that I had added in the 'decreasing' argument.
> > > 
> > > It did seem very odd to me when I saw the undocumented
> > > argument.
> > > 
> > > Sorry for the this faulty bug report.
> > > 
> > > BTW, would someone please add a 'decreasing' argument to rank.
> > > It seems natural to have one, just like sort, and only
> > > involves about two lines of code and a few lines of
> > > editing to the help file. 
> > 
> > I don't think so.  At the very least, each tie method needs a change, as 
> > may the handling of NAs.  Also the writing a comprehensible help page will 
> > become very complex.
> >
> > What is the need?  Rank works for numeric vectors, and why can't you just
> > call rank(-x) or n+1-rank(x)?  The reason that does not work for sort() is
> > that it deals with non-numeric vectors.
> 
> As you note there isn't a need, I just am used to thinking about
> ranking and sorting as being either increasing (the default) or
> decreasing, having an explicit 'decreasing' option makes the 
> the code more transparent.  It's a minor thing but as I erroneously
> supposed it to be easy, it seemed worthwhile. 
> 
> You're right that there would need to be a special case for at least
> ties.method='first', but I think for the others just using
>  if (decreasing) x <- -x 
> should be all that is needed.  

Looks like rank() does actually work for non-numeric vectors (even though
it was not documented to do so), which complicates things further.

> > Incidentally, we might need a `last' value for ties.method.
> 
> I don't see that my suggestion necessitates that.  However one
> could argue for a 'last' value in ties.method for completeness.
> I personally have had no need for 'first' nor would I for 'last'.

If you allow decreasing values, then I suspect you want a stable sort 
variant, which would be `last' not `first'.  Certainly `first' makes no 
sense.

-- 
Brian D. Ripley,                  ripley@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


[Rd] documentation for rank() (PR#7298)
Prof Brian Ripley