R which()函数的结果*始终*有序吗?

R which()函数的结果*始终*有序吗?,r,R,我想保证,的结果(…,arr.ind=TRUE)总是按顺序排列的,特别是:按(列,行)升序排列。我在函数文档中没有看到这样的评论,而这似乎是基于我所做的一些实验的情况。我如何检查/了解情况是否如此 例如。当我运行下面的代码时,输出是一个矩阵,其中结果按(col,row)列升序排列 > set.seed(1) > vals <- rnorm(10) > valsall <- sample(as.numeric(replicate(10, vals))) > ma

我想保证,
的结果(…,arr.ind=TRUE)
总是按顺序排列的,特别是:按
(列,行)
升序排列。我在
函数文档中没有看到这样的评论,而这似乎是基于我所做的一些实验的情况。我如何检查/了解情况是否如此

例如。当我运行下面的代码时,输出是一个矩阵,其中结果按
(col,row)
列升序排列

> set.seed(1)
> vals <- rnorm(10)
> valsall <- sample(as.numeric(replicate(10, vals)))
> mat <- matrix(valsall, 10, 10)
> which(mat == max(mat), arr.ind = TRUE)
      row col
 [1,]   1   1
 [2,]   3   1
 [3,]   1   2
 [4,]   2   2
 [5,]  10   2
 [6,]   1   6
 [7,]   2   8
 [8,]   4   8
 [9,]   1   9
[10,]   6   9 
>设置种子(1)
>VAL valsall mat,其中(mat==最大(mat),arr.ind=真)
行列
[1,]   1   1
[2,]   3   1
[3,]   1   2
[4,]   2   2
[5,]  10   2
[6,]   1   6
[7,]   2   8
[8,]   4   8
[9,]   1   9
[10,]   6   9 

第1部分:

如果文档不够,请回答您关于如何更深入地理解函数的部分问题,而不必深入了解函数which()的细节

由于match()不是一个基本函数(用C编写),即使用R的基本构造块编写,因此我们可以通过打印函数本身来检查幕后的情况。注意,使用反勾号可以检查具有保留名称的函数,例如+,因此在本例中是可选的。这个稠密的R代码读起来可能非常烦人,但我发现它很有教育意义,而且它确实偶尔会解决一些心理问题

> print(`which`)
function (x, arr.ind = FALSE, useNames = TRUE) 
{
    wh <- .Internal(which(x))
    if (arr.ind && !is.null(d <- dim(x))) 
        arrayInd(wh, d, dimnames(x), useNames = useNames)
    else wh
}
<bytecode: 0x00000000058673e0>
<environment: namespace:base>
打印(`which`) 函数(x,arr.ind=FALSE,useNames=TRUE) {
wh不确定您需要什么我想了解函数是否总是以有序的方式返回结果。为什么不在上述结果之后进行排序呢?
> testmat <- matrix(1:10, nrow = 2, ncol = 5)
> testmat
     [,1] [,2] [,3] [,4] [,5]
[1,]    1    3    5    7    9
[2,]    2    4    6    8   10
> as.numeric(testmat)
 [1]  1  2  3  4  5  6  7  8  9 10