【发布时间】:2015-11-03 11:41:02
【问题描述】:
我注意到,在数组的边距上使用 apply() 会产生一个输出,其中维度被重新排列:应用操作的维度成为输出中的第一个维度。
这是 apply() 如何更改 dim>2 数组的维度排序的示例。
我们取一个 3-dim 数组并在第二维上应用一个加法
a <- array(1:24,dim=c(3,4,2));a
## , , 1
##
## [,1] [,2] [,3] [,4]
## [1,] 1 4 7 10
## [2,] 2 5 8 11
## [3,] 3 6 9 12
##
## , , 2
##
## [,1] [,2] [,3] [,4]
## [1,] 13 16 19 22
## [2,] 14 17 20 23
## [3,] 15 18 21 24
b <- apply(a,c(1,3),function(x) x+1);b
## , , 1
##
## [,1] [,2] [,3]
## [1,] 2 3 4
## [2,] 5 6 7
## [3,] 8 9 10
## [4,] 11 12 13
##
## , , 2
##
## [,1] [,2] [,3]
## [1,] 14 15 16
## [2,] 17 18 19
## [3,] 20 21 22
## [4,] 23 24 25
第二个维度现在是第一个维度。 当然,当我们应用一个折叠维度(mean,sum…)的操作时,这种变化不会发生,因为产生操作的维度会消失。
我的问题是:
为什么 apply 会有这样的行为?我确定是有原因的,我想知道。
有没有简单的方法来避免它?我不得不承认,我对 apply 家族的了解仅限于 apply、lapply、sapply。也许有一种简单的方法可以在数组的边缘应用函数并生成具有相同维度的数组。
我确定了两个与我相关的问题:
一个未回答的问题,与我的问题基本相似,但更具体到作者的问题。
https://stackoverflow.com/questions/21815777/double-apply-loop-in-r-rearranging-dimensions-of-the-output
关于 plyr::aaply 的类似问题。我不知道这个功能,所以我不能说这个问题与应用有关。
how to use aaply and retain order of dimensions in array?
【问题讨论】:
-
你也可以阅读这个:stackoverflow.com/questions/9521260/…,它给出了转置结果的原因
标签: arrays r multidimensional-array apply