确定向量是否已排序

时间:2014-05-08 16:51:24

标签: r sorting

我想确定一个向量是否总是在R中增加或总是减少。

理想情况下,如果我有这三个载体:

asc=c(1,2,3,4,5)
des=c(5,4,3,2,1)
non=c(1,3,5,4,2)

我希望前两个返回TRUE,最后一个返回FALSE。

我尝试了几种方法。首先,我试过了:

> is.ordered(asc)
[1] FALSE
> is.ordered(des)
[1] FALSE
> is.ordered(non)
[1] FALSE

我也尝试过:

> order(non)
[1] 1 5 2 4 3

希望我可以简单地将此向量与1,2,3,4,55,4,3,2,1进行比较,但即使这样也会返回一串逻辑,而不是单个true或false:

> order(non)==c(1,2,3,4,5)
[1]  TRUE FALSE FALSE  TRUE FALSE

3 个答案:

答案 0 :(得分:13)

也许is.unsorted是你要找的功能

> is.unsorted(asc)
[1] FALSE
> is.unsorted(rev(des)) # here you need 'rev'
[1] FALSE
> is.unsorted(non)
[1] TRUE

is.unsorted的描述中你可以找到:

  

测试对象是否未按顺序排序(按升序排列),无需对其进行排序。

答案 1 :(得分:6)

这是使用?is.unsorted的一种方式:

is.sorted <- function(x, ...) {
    !is.unsorted(x, ...) | !is.unsorted(rev(x), ...)
}

查看is.unsorted的其他参数,也可以在这里传递。

答案 2 :(得分:0)

这是不使用is.unsorted()来检查向量是否已排序的一种方法。如果给定向量中的所有元素都按升序排序,则此函数将返回true;否则,则返回false:

is.sorted <- function(x) {
  if(all(sort(x, decreasing = FALSE) == x)) {
    return(TRUE)
  } else {
    return(FALSE)
  }
}