[R] Unexpected results from sort function when partial and index are used

Sundar Dorai-Raj sundar.dorai-raj at pdf.com
Thu Nov 4 01:13:45 CET 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?
> 
> 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




More information about the R-help mailing list