Greg Finak
2005-Oct-04 17:36 UTC
[Rd] vector labels are not permuted properly in a call to sort() (R 2.1)
Not sure if this is the correct forum for this, 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 Cheers,
Liaw, Andy
2005-Oct-04 17:51 UTC
[Rd] vector labels are not permuted properly in a call to sort() (R 2.1)
The `problem' is that sort() does not doing anything special when given a matrix: it only treat it as a vector. After sorting, it copies attributes of the original input to the output. Since dimnames are attributes, they get copied as is. Try:> y <- matrix(8:1, 4, 2, dimnames=list(LETTERS[1:4], NULL)) > y[,1] [,2] A 8 4 B 7 3 C 6 2 D 5 1> sort(y)[,1] [,2] A 1 5 B 2 6 C 3 7 D 4 8 Notice the row names stay the same. I'd argue that this is the correct behavior. Andy> From: Greg Finak > > Not sure if this is the correct forum for this, 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 > > Cheers, > > ______________________________________________ > R-devel at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel > >