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