The NEWS file for R-devel (as of 2018-11-28 r75702) says • order(...., decreasing=c(TRUE,FALSE)) could fail in some cases. Reported from StackOverflow via Karl Nordström.
However, either I don't understand the meaning of decreasing=c(TRUE,FALSE) or there are still problems. I thought order(x,y,decreasing=c(TRUE,FALSE) meant to return indices, i, such that x[i] was non-increasing and that ties among the x's would be broken by y in non-decreasing order. E.g., that interpretation works for numeric vectors: > d <- data.frame(X=c(2,1,2,1,2,2,1), N=c(4:7,1:3)) > d[order(d$X, d$N, decreasing=c(TRUE, FALSE)), ] # expect decreasing X and, within group of tied Xes, increasing N X N 5 2 1 6 2 2 1 2 4 3 2 6 7 1 3 2 1 5 4 1 7 But it fails for character vectors: E.g., add some of those that have the same sort order as 'N': > d$Char <- LETTERS[d$N] > identical(order(d$N), order(d$Char)) # expect TRUE [1] TRUE I expected the new columns to give the same sort order when they replace 'd$N' in the first call to order, but they do not: It acts like it would with decreasing=c(TRUE,TRUE). > order(d$X, d$Char, decreasing=c(TRUE, FALSE)) [1] 3 1 6 5 4 2 7 > d[order(d$X, d$Char, decreasing=c(TRUE, FALSE)), ] X N Char 3 2 6 F 1 2 4 D 6 2 2 B 5 2 1 A 4 1 7 G 2 1 5 E 7 1 3 C Bill Dunlap TIBCO Software wdunlap tibco.com [[alternative HTML version deleted]] ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel