[Rd] vector labels are not permuted properly in a call to sort() (R 2.1)

David James dj at research.bell-labs.com
Wed Oct 5 15:16:19 CEST 2005


Martin Maechler wrote:
> >>>>> "AndyL" == Liaw, Andy <andy_liaw at merck.com>
> >>>>>     on Tue, 4 Oct 2005 13:51:11 -0400 writes:
> 
>     AndyL> The `problem' is that sort() does not doing anything special when given
>     AndyL> a matrix: it only treat it as a vector.  After sorting, it copies
>     AndyL> attributes of the original input to the output.  Since dimnames are
>     AndyL> attributes, they get copied as is.
> 
> exactly. Thanks Andy.
> 
> And I think users would want this (copying of attributes) in
> many cases; in particular for user-created attributes
> 
> ?sort  really talks about sorting of vectors and factors;
>        and it doesn't mention attributes explicitly at all
>        {which should probably be improved}.
> 
> One could wonder if R should keep the dim & dimnames
> attributes for arrays and matrices.  
> S-plus (6.2) simply drops them {returning a bare unnames vector}
> and that seems pretty reasonable to me.

This is as described in the Blue book, p.146, "Throwing Away Attributes".

> 
> At least the user would never make the wrong assumptions that
> Greg made about ``matrix sorting''.
> 
> 
>     AndyL> Try:
> 
>     >> y <- matrix(8:1, 4, 2, dimnames=list(LETTERS[1:4], NULL))
>     >> y
>     AndyL> [,1] [,2]
>     AndyL> A    8    4
>     AndyL> B    7    3
>     AndyL> C    6    2
>     AndyL> D    5    1
>     >> sort(y)
>     AndyL> [,1] [,2]
>     AndyL> A    1    5
>     AndyL> B    2    6
>     AndyL> C    3    7
>     AndyL> D    4    8
> 
>     AndyL> Notice the row names stay the same.  I'd argue that this is the correct
>     AndyL> behavior.
> 
>     AndyL> Andy
> 
> 
>     >> From: Greg Finak
>     >> 
>     >> Not sure if this is the correct forum for this, 
> 
> yes, R-devel is the proper forum.
> {also since this is really a proposal for a change in R ...}
> 
>     >> but I've found what I  
>     >> would consider to be a potentially serious bug to the 
>     >> unsuspecting user.
>     >> Given a numeric vector V with class labels in R,  the following calls
>     >> 
>     >> 1.
>     >> > sort(as.matrix(V))
>     >> 
>     >> and
>     >> 
>     >> 2.
>     >> >as.matrix(sort(V))
>     >> 
>     >> produce different ouput. The vector is sorted properly in 
>     >> both cases,  
>     >> but only 2. produces the correct labeling of the vector. The call to  
>     >> 1. produces a vector with incorrect labels (not sorted).
>     >> 
>     >> Code:
>     >> >X<-c("A","B","C","D","E","F","G","H")
>     >> >Y<-rev(1:8)
>     >> >names(Y)<-X
>     >> > Y
>     >> A B C D E F G H
>     >> 8 7 6 5 4 3 2 1
>     >> > sort(as.matrix(Y))
>     >> [,1]
>     >> A    1
>     >> B    2
>     >> C    3
>     >> D    4
>     >> E    5
>     >> F    6
>     >> G    7
>     >> H    8
>     >> > as.matrix(sort(Y))
>     >> [,1]
>     >> H    1
>     >> G    2
>     >> F    3
>     >> E    4
>     >> D    5
>     >> C    6
>     >> B    7
>     >> A    8
>     >>
> 
> ______________________________________________
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel


--
David



More information about the R-devel mailing list