jeffshantz - 2 months ago 14
R Question

Understanding the order() function

I'm trying to understand how the

`order()`
function works. I was under the impression that it returned a permutation of indices, which when sorted, would sort the original vector.

For instance,

``````> a <- c(45,50,10,96)
> order(a)
[1] 3 1 2 4
``````

I would have expected this to return
`c(2, 3, 1, 4)`
, since the list sorted would be 10 45 50 96.

Can someone help me understand the return value of this function?

This seems to explain it.

The definition of `order` is that `a[order(a)]` is in increasing order. This works with your example, where the correct order is the fourth, second, first, then third element.

You may have been looking for `rank`, which returns the rank of the elements
`R> a <- c(4.1, 3.2, 6.1, 3.1)`
`R> order(a)`
`[1] 4 2 1 3`
`R> rank(a)`
`[1] 3 2 4 1`
so `rank` tells you what order the numbers are in, `order` tells you how to get them in ascending order.

`plot(a, rank(a)/length(a))` will give a graph of the CDF. To see why `order` is useful, though, try `plot(a, rank(a)/length(a),type="S")` which gives a mess, because the data are not in increasing order

If you did
`oo<-order(a)`
`plot(a[oo],rank(a[oo])/length(a),type="S")`
or simply
`oo<-order(a)`
`plot(a[oo],(1:length(a))/length(a)),type="S")`
you get a line graph of the CDF.

I'll bet you're thinking of rank.

Source (Stackoverflow)