在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 ==3和qux==4会生成和原数组同维度的逻辑数组,分别标记所有值为3、值为4的位置|是逻辑或运算符,把两个逻辑数组合并,得到所有值为3或4的位置arr.ind=TRUE是关键参数:它告诉which()返回多维索引(行/列/层),而不是默认的「扁平化向量索引」(如果不加这个参数,你会得到一串单一数字,那是把数组按列拍扁后的位置,对多维数组来说可读性极差)
额外验证小技巧
如果你想快速确认某个索引对应的元素,直接用索引提取就行:
qux[1,2,1] # 输出4,对应结果第一行 qux[2,2,2] # 输出4,对应结果第六行
内容的提问来源于stack exchange,提问作者plzhelp




