在R中使用对多维数组的应用

TJB*_*TJB 33 r

我想知道如何在多维数组上使用apply.我有以下内容:

A <- array(0, c(2, 2, 5))
for(i in 1:5) {
  A[, , i] <- matrix(rnorm(4), 2, 2)
}
Run Code Online (Sandbox Code Playgroud)

我想取这些切片的平均值来得到一个2乘2的矩阵.我提出的任何方式都非常糟糕.

我希望能够使用apply,就像我想要矩阵的列的平均说法一样:

B <- matrix(rnorm(10), 5, 2)
B.mean <- apply(B, 2, mean)
Run Code Online (Sandbox Code Playgroud)

但这似乎与我认为3D阵列的方式不同:

A.mean <- apply(A, 3, mean)
Run Code Online (Sandbox Code Playgroud)

我感谢你的建议.

小智 39

A.mean <- apply(A, c(1,2), mean)
Run Code Online (Sandbox Code Playgroud)

  • 一般来说,`apply`的`margin`参数应该是你想要保留的维度的向量,而不是崩溃. (13认同)
  • @ncray,@mbq:这有资格作为R gotcha,因为`apply(,margin,)`指定我们**不想操作的维度而不是我们所做的维度.(为了直观,你可以自定义你自己的`apply_on()`,它指定了你想要操作的尺寸.) (2认同)
  • @smci:不,我认为这是正确的,如果你有一个n行,m列的数组,并且你想对每一行应用一个'mean`函数,那么你在第一维上(行:`apply(x) ,c(1),mean)`),你得到一个n维向量(即行数).虽然很难让你把它推向更高维的阵列. (2认同)