>>>>> "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. 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