R 确定向量是否有序
我想确定向量在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)
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类似于重言式。我想您应该知道。