理解R中的数组索引

got*_*nes 3 arrays r

关于数组R文档说明

数据向量中的值以与FORTRAN中出现的顺序相同的顺序给出数组中的值,即"列主要顺序" ,第一个下标移动最快,最后一个下标最慢.

然后,它通过将数据加载到二维数组中给出了一个澄清的例子:

 > x <- array(1:20, dim=c(4,5))   # Generate a 4 by 5 array.
 > x
      [,1] [,2] [,3] [,4] [,5]
 [1,]    1    5    9   13   17
 [2,]    2    6   10   14   18
 [3,]    3    7   11   15   19
 [4,]    4    8   12   16   20
Run Code Online (Sandbox Code Playgroud)

从与其他语言的经验,我想x[1, 2],而不是x[2, 1],是2,但是这是很容易调整自己的思维.然而,就像我进行心理模型转换一样快,下一个例子将它分开:

 > i <- array(c(1:3,3:1), dim=c(3,2))
 > i                             # i is a 3 by 2 index array.
      [,1] [,2]
 [1,]    1    3
 [2,]    2    2
 [3,]    3    1
 > x[i]                          # Extract those elements
 [1] 9 6 3
Run Code Online (Sandbox Code Playgroud)

所以,我可以看到这里发生的事情是,我们提取的元素x[1, 3],x[2,2]x[3, 1].好吧,但这不完全违背上述"专栏主要订单"的说法吗?

根据我的理解,i应该是一个2乘3阵列,R应该解释x[i]x[i[1, 1], i[2, 1]], x[i[1, 2], i[2, 2]], ....但是,我们观察到的是,R确实如此x[i[1, 1], i[1, 2]], x[i[2, 1], i[2, 2]], ...

这是R中的根本不一致,还是我完全误解了文档?

mbq*_*mbq 6

"列主要顺序"仅表示内部矩阵是逐列排序的向量; 看到了

x[1:20]
Run Code Online (Sandbox Code Playgroud)

1, 2, 3, ..., 19, 20.尺寸在科学中照常排序 - 第一行,然后是列,然后是深度,然后是深度...第三个例子很棘手:如果i具有相同数量的x具有尺寸的列,则将其解释为矢量化选择.如果不是,都ix都受宠若惊逐列向量和简单的矢量指数化规则...例如x[t(i)]1:20[c(1,3,2,2,3,1)].