Martin Maechler wrote: > >>>>> "AndyL" == Liaw, Andy <[EMAIL PROTECTED]> > >>>>> 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@r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel -- David ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel