我有数字对(x,y),我想以这样的方式对这些对进行排序,如果x1&lt; = x2和y1&lt; = y2,那么(x1,y1)应该在之前(x2,y2);但是,如果x1> x2和y1 < y2,或者相反,那么订单不应该改变。
示例:
v <- list(a=c(2,1), b=c(1,3), d=c(1,1), e=c(2,3))
所需订购:d,a,b,c
在另一种语言中,我会使用自定义比较函数调用排序算法,例如
compare <- function(a, b) {
if(a[1] < b[1] && a[2] < b[2]) TRUE
FALSE
}
然而,似乎在R中没有简单的方法。或者在那里?
请注意,按x然后按y排序将不起作用。
编辑2:
这是一个类似于我想要的类的解决方案。
class(v) <- "foo"
'[.foo' <- function(x, i) {
class(x) <- "list"
structure(x[i], class="foo")
}
'>.foo' <- function(a, b) {
ifelse(
(a[[1]][1] >= b[[1]][1] & a[[1]][2] > b[[1]][2])
||
(a[[1]][1] > b[[1]][1] & a[[1]][2] >= b[[1]][2]),
TRUE, FALSE)
}
'==.foo' <- function(a, b) {
!(a > b || b > a)
}
谢谢你,alexis_laz。请将此表示为您的答案,以便我投票给您。