An embedded and charset-unspecified text was scrubbed... Name: not available Url: https://stat.ethz.ch/pipermail/r-help/attachments/20041103/12e34700/attachment.pl
Unexpected results from sort function when partial and index are used
3 messages · Tuszynski, Jaroslaw W., Sundar Dorai-Raj, Brian Ripley
Tuszynski, Jaroslaw W. wrote:
Hi, Consider the following example: sort(10:1, partial=3) ## 1 2 3 7 6 5 4 8 9 10 sort(10:1, index=T) ## $x: 1 2 3 4 5 6 7 8 9 10 ## $ix: 10 9 8 7 6 5 4 3 2 1 sort(10:1, partial=3, index=T) ## 1 2 3 7 6 5 4 8 9 10 The first 2 calls gave expected returns; however, the third one did not returned an index as requested. I could not find anything about it in http://stat.ethz.ch/R-manual/R-patched/library/base/html/sort.html <http://stat.ethz.ch/R-manual/R-patched/library/base/html/sort.html> , so it seems to be an "undocumented feature". Does any body know how to "convince" sort to return index of partially sorted array? Thanks Jarek
Jarek,
Looking at the code for sort, we see the following:
if (!is.null(partial)) {
if (!all(is.finite(partial)))
stop("non-finite `partial'")
y <- .Internal(psort(x, partial))
} else {
# other sort code
}
so index.return is ignored if partial is provided. To get the index you
can use ?match:
z <- rnorm(10)
x <- sort(z, partial = 3)
ix <- match(z, x)
Hopefully, I used ?match correctly. Please verify on your own.
--sundar
On Wed, 3 Nov 2004, Tuszynski, Jaroslaw W. wrote:
Hi, Consider the following example: sort(10:1, partial=3) ## 1 2 3 7 6 5 4 8 9 10 sort(10:1, index=T) ## $x: 1 2 3 4 5 6 7 8 9 10 ## $ix: 10 9 8 7 6 5 4 3 2 1 sort(10:1, partial=3, index=T) ## 1 2 3 7 6 5 4 8 9 10 The first 2 calls gave expected returns; however, the third one did not returned an index as requested. I could not find anything about it in http://stat.ethz.ch/R-manual/R-patched/library/base/html/sort.html <http://stat.ethz.ch/R-manual/R-patched/library/base/html/sort.html> , so it seems to be an "undocumented feature". Does any body know how to "convince" sort to return index of partially sorted array?
You cannot. There is no underlying code to do so, and the person who added 'index.return' forgot this case. I was against having it at all -- we have sort.list for that purpose. I've updated the documentation. Sundar's match() solution will not work if there are duplicate values. If you need the index, just do a full sort -- partial sorting is only implemented for efficiency reasons, and nowadays full sorting is fast enough even on massive vectors.
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