我想确定一个向量是否总是在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
进行比较,但即使这样也会返回一串逻辑,而不是单个true或false:
> order(non)==c(1,2,3,4,5)
[1] TRUE FALSE FALSE TRUE FALSE
答案 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)
}
}