我注意到在数组的边缘使用apply()会产生一个输出,其中重新排列维度:应用操作的维度成为输出中的第一个维度。
这是apply()如何更改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 ...)的操作时,不会发生这种变化,因为生成操作的维度将消失。
我的问题是:
为什么申请表现得那样?我确信有一个原因,我想知道。
有没有一种简单的方法可以避免它?我不得不承认,我对申请家庭的了解仅限于申请,申请,保险。也许有一种简单的方法可以在数组的边缘上应用函数并生成具有相同尺寸的数组。
我发现了两个与我有关的问题:
一个未解决的问题,与我的问题基本相似,但更具体针对作者的问题 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?
答案 0 :(得分:0)
不知道你是否已经发现了问题。但是我遇到了同样的问题,因为我没有找到答案如何实际获得结果相同的维度,我想与你分享这个解决方法。
b <- apply(b, c(1,3), identity); b
, , 1
[,1] [,2] [,3] [,4]
[1,] 2 5 8 11
[2,] 3 6 9 12
[3,] 4 7 10 13
, , 2
[,1] [,2] [,3] [,4]
[1,] 14 17 20 23
[2,] 15 18 21 24
[3,] 16 19 22 25