R 多维数组中的子集和赋值

Coh*_*het 5 arrays r matrix subset multidimensional-array

我正在使用 R 处理 3D 维数组。我试图将它用作不同时刻的一组二维矩阵。

我发现了一种我真的不理解的行为,我想知道为什么会发生。我试图在这里和其他地方找到解释,但直到现在我仍然有疑问。

我的 3D 数组是这样的:

array3D=array(1:45,c(5,3,3))

正如我所期望的,我可以访问单独的二维矩阵

 array3D[1,,]
     [,1] [,2] [,3]
[1,]    1   16   31
[2,]    6   21   36
[3,]   11   26   41
Run Code Online (Sandbox Code Playgroud)

然而,尝试访问两个二维矩阵我没有得到我所期望的结果

 array3D[1:2,,]
, , 1

     [,1] [,2] [,3]
[1,]    1    6   11
[2,]    2    7   12

, , 2

     [,1] [,2] [,3]
[1,]   16   21   26
[2,]   17   22   27

, , 3

     [,1] [,2] [,3]
[1,]   31   36   41
[2,]   32   37   42
Run Code Online (Sandbox Code Playgroud)

我发现我可以使用解决这个问题aperm(array3D[1:2,,]),但我不明白在做什么。

另一个问题是当我尝试做作业时,我不明白为什么这不起作用

array3D[1:2,,]=matrix(9:1,3,3)
array3D[1,,]
     [,1] [,2] [,3]
[1,]    9    3    6
[2,]    7    1    4
[3,]    5    8    2
Run Code Online (Sandbox Code Playgroud)

我认为我可以用循环或者aaply我在这里读到的方法来解决这个问题,但我认为如果我想使用 3D 数组,那么理解正在发生的事情非常重要。如果有人能给我指出正确的方向,我会很高兴。

我试图在这里找到答案并阅读http://adv-r.had.co.nz/,但到目前为止还没有运气。

更新

我发现如果不使用第一个索引而使用最后一个索引,则一切正常,但我仍然不明白为什么。R 是固有的吗?可以以其他方式使用第一个吗?

array3D=array(1:45,c(3,3,5))
array3D[,,1:2]=matrix(9:1,3,3)
array3D[,,2]
     [,1] [,2] [,3]
[1,]    9    6    3
[2,]    8    5    2
[3,]    7    4    1
Run Code Online (Sandbox Code Playgroud)

Dav*_*ann 3

我认为还不太清楚您想要实现什么,但这里有一些示例:在第一点上,您可以通过执行以下操作来选择 z 方向上的三个 3×3 矩阵中的两个:

array3D[,,1:2]
Run Code Online (Sandbox Code Playgroud)

因此,您可以替换为适当大小的数组:

array3D[,,1:2] <- array(18:1,c(3,3,2))
Run Code Online (Sandbox Code Playgroud)

关于为什么必须使用第三个索引的问题:将其视为 3D 坐标系中的 z 方向。行是 x 方向(垂直),列是 y 方向(水平)。建立索引时,array3D[1:2,,]您选择了前两行,同时保持 x 和 z 方向上的所有内容。