重新排序R中的数字对(自定义排序)

时间:2017-04-10 08:20:41

标签: r sorting

我有数字对(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。请将此表示为您的答案,以便我投票给您。

0 个答案:

没有答案