R 确定向量是否有序

R 确定向量是否有序,r,sorting,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)

我想确定向量在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,5
5,4,3,2,1
进行比较,但即使这样也会返回一个逻辑字符串,而不是一个真或假:

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

这里有一种使用
?的方法是.unsorted

is.sorted <- function(x, ...) {
    !is.unsorted(x, ...) | !is.unsorted(rev(x), ...)
}
is.sorted可能就是您想要的函数

> is.unsorted(asc)
[1] FALSE
> is.unsorted(rev(des)) # here you need 'rev'
[1] FALSE
> is.unsorted(non)
[1] TRUE
is.unsorted
的描述中,您可以找到:

测试对象是否未排序(按递增顺序),而无排序成本


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

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

is.sorted在Matlab中我会检查向量的
diff
是否总是大于零,或者总是小于零:
all(diff(myVec)>=0)| | all(diff(myVec)我在这里要说明。在编写
all(sort(x,discreating=FALSE)==x时,不需要反求
if-else
条件
这已经是一个逻辑值。因此,如果该值为真,则返回TRUE,否则返回FALSE类似于重言式。我想您应该知道。