[R] sort() leaves row names unaffected

Liaw, Andy andy_liaw at merck.com
Tue Dec 14 14:33:18 CET 2004


The problem, I think, boils down to the following:

> x <- matrix(c(3, 1, 2), ncol=3, dimnames=list(NULL, letters[1:3]))
> x
     a b c
[1,] 3 1 2
> sort(x)
     a b c
[1,] 1 2 3
> y <- rbind(x, c(1,1,2))
> y
     a b c
[1,] 3 1 2
[2,] 1 1 2
> sort(y)
     a b c
[1,] 1 1 2
[2,] 1 2 3

I.e., I'm guessing your `df1.y' is a matrix with one row and column names
`a' through `e'.  When you sort() a matrix, sort() simply treat it as a
vector (as a matrix in R is just a vector with a dim attribute) and sort
that (by stacking columns).  The output is sorted, but with the original
dimension and dimnames as the input.

Perhaps sort() should be made generic with methods for
matrix/array/data.frame, but one needs to think about what the logical thing
to do if no other argument is given...  In any case, it shouldn't give you
the result you're expecting (at least not by default): you are expecting the
result to be sorted columns, which hardly makes sense if there are more than
one row.

Andy

> From: Martin Wegmann
> 
> Hello, 
> 
> I wonder if I ran into a bug. If I do 
> 
> summary(df1$X1) -> df1.y
> 
> df1.y
> a  b   c   d  e
> [1,] 50.74627 8.955224 17.91045 19.40299 2.985075
> 
> sort(df1.y) 
>        a  b   c   d  e
> [1,] 2.985075 8.955224 17.91045 19.40299 50.74627
> 
> my numbers are sorted but do not anymore correspond to the rownames. 
> For me it is counterintuitive that solely the numbers are 
> sorted and not the 
> names. Is there a way to sort names + numbers or is this 
> behaviour of sort() 
> unintended?
> 
> Martin
> 
> R 2.0.1-1 debian reposit.
> 
> ______________________________________________
> R-help at stat.math.ethz.ch mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide! 
> http://www.R-project.org/posting-guide.html
> 
>




More information about the R-help mailing list