【问题标题】:Why does apply changes the dimension of arrays?为什么 apply 会改变数组的维度?
【发布时间】: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?

【问题讨论】:

标签: arrays r multidimensional-array apply


【解决方案1】:

不知道你是否已经发现了你的问题。但是我刚刚遇到了同样的问题,由于我没有找到如何为结果实际获得相同尺寸的答案,所以我想与您分享这个解决方法。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-12
    • 2019-09-13
    • 2021-11-29
    • 2020-11-16
    • 1970-01-01
    • 1970-01-01
    • 2010-10-04
    相关资源
    最近更新 更多