首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >哪个()函数的结果*总是*有序的吗?

哪个()函数的结果*总是*有序的吗?
EN

Stack Overflow用户
提问于 2019-03-05 23:40:13
回答 1查看 73关注 0票数 2

我要保证,which(..., arr.ind = TRUE)的结果总是有序的,特别是:由(col, row)安排升序。我在which函数文档中没有看到这样的注释,而基于我所做的一些实验,情况似乎是这样的。如果是这样的话,我如何检查/学习呢?

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

代码语言:javascript
复制
> 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 
EN

回答 1

Stack Overflow用户

发布于 2019-03-21 12:48:29

Part1:

如果文档还不够,请回答一部分关于如何在更深层次上理解函数的问题,而不讨论函数()的细节。

由于match()不是一个基元函数(用C编写),即使用R的基本构建块编写,所以我们可以通过打印函数本身来检查幕后发生了什么。请注意,使用backticks可以检查具有保留名称的函数,例如+,因此在本例中是可选的。这个密集的R码读起来可能会非常令人厌烦,但我发现它很有教育意义,而且偶尔也会解决一些心理问题。

代码语言:javascript
复制
> 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>

Part2:

因此,在放弃尝试以上述方式理解哪个函数和arrayInd函数之后,我正以常识的方式尝试它。对我来说最有效的检查矩阵/数组的每个值的方法是在某个时候把它转换成一个一维对象。强制从矩阵到原子向量,或者任何维度的缩减都会导致连接每个维度的完整列,所以对我来说,更高层次的函数也会遵循这个基本规则,这是很自然的。

代码语言:javascript
复制
> 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 

我发现Hadley Wickham的Advanced在回答您的问题时是一个非常有价值的资源,特别是关于函数和数据结构的章节。[http://adv-r.had.co.nz/][1]

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55013328

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档