You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

在R中利用arr.ind识别多维数组中值为3或4的维度索引

理解R中which()函数带arr.ind=TRUE的多维数组索引输出

首先要告诉你:你写的代码完全正确,而且已经拿到了想要的结果!下面我帮你拆解清楚输出里每个部分的含义,以及为什么这个操作是对的。

先回顾你的数组结构

你创建的数组qux用了dim=c(3,2,3),这个参数定义了数组的三个维度:

  • 第一个维度(dim1):,共3行(编号1、2、3)
  • 第二个维度(dim2):,共2列(编号1、2)
  • 第三个维度(dim3):切片/层,共3层(就是你输出里看到的, , 1, , 2, , 3

输出列的含义解释

你用which((qux ==3) | (qux==4), arr.ind=TRUE)得到的结果里,三列分别对应数组的三个维度:

  • dim1:匹配元素所在的行号(对应数组输出里的[1,]/[2,]/[3,]
  • dim2:匹配元素所在的列号(对应数组输出里的[,1]/[,2]
  • dim3:匹配元素所在的层号(对应数组输出里的, , 1/, , 2/, , 3

举个实际例子验证:
看结果第一行[1,] 1 2 1,对应的位置是「第1层、第1行、第2列」,去看你的qux第1层:

, , 1
     [,1] [,2]
[1,]   10    4
[2,]    5    7
[3,]    1    4

这个位置的元素正好是4,完全符合你的筛选条件(3或4)。

再看结果第6行[6,] 2 2 2,对应「第2层、第2行、第2列」,看第2层的内容:

, , 2
     [,1] [,2]
[1,]    3    3
[2,]    3    4
[3,]    1    3

这个位置的元素是4,也完美匹配筛选规则。

为什么你的代码是正确的

  • qux ==3qux==4会生成和原数组同维度的逻辑数组,分别标记所有值为3、值为4的位置
  • |是逻辑或运算符,把两个逻辑数组合并,得到所有值为34的位置
  • arr.ind=TRUE是关键参数:它告诉which()返回多维索引(行/列/层),而不是默认的「扁平化向量索引」(如果不加这个参数,你会得到一串单一数字,那是把数组按列拍扁后的位置,对多维数组来说可读性极差)

额外验证小技巧

如果你想快速确认某个索引对应的元素,直接用索引提取就行:

qux[1,2,1]  # 输出4,对应结果第一行
qux[2,2,2]  # 输出4,对应结果第六行

内容的提问来源于stack exchange,提问作者plzhelp

火山引擎 最新活动