[R] lexicographic comparison of two vectors
Duncan Murdoch
murdoch at stats.uwo.ca
Mon May 12 21:24:58 CEST 2008
On 5/12/2008 2:58 PM, Gabriel Valiente wrote:
> Is there any built-in way to lexicographically compare two vectors of
> the same length in R? The textbook algorithm could be coded as follows:
>
> lex.cmp <- function (vec1,vec2) {
> for (j in 1:length(vec1)) {
> if (vec1[j] < vec2[j]) { return(-1) }
> if (vec1[j] > vec2[j]) { return(1) }
> }
> return(0)
> }
I don't think there's any standard function for this. You could write
one as above, or slightly faster as
lex.cmp <- function(vec1, vec2) {
index <- which.min(vec1 == vec2) # find the first diff
sign(vec1[index] - vec2[index]) # assumes numeric
}
If you don't want to assume numeric data, you may need to expand that
last line to a series of comparisons like yours, but with index in place
of j, e.g.
if (vec1[index] < vec2[index]) { return(-1) }
if (vec1[index] > vec2[index]) { return(1) }
return(0)
(unless there's a compare function in some package or other.)
Duncan Murdoch
More information about the R-help
mailing list