在多维数组上应用带条件语句的函数

时间:2018-05-25 20:15:02

标签: arrays r if-statement multidimensional-array apply

我有两个3D阵列:

a=array(1:27, dim=c(3,3,3))
b=array(c(0,2,6,0), dim=c(3,3,3))

我希望总结阵列a中沿z维度(获得2D矩阵)的所有值,其中阵列b中对应的x,y,z位置处的值> 0

我更喜欢应用(最好使用标准功能)和if语句(如

)的组合
summed=apply(a, c(1,2), sum {if(b[b>0])})

虽然给了我语法错误。我在这里想念什么?

1 个答案:

答案 0 :(得分:0)

我们可以成倍增加'通过' b'的逻辑数组。通过乘以' a'通过二进制数组' b',那些在' b'中为0的元素。将成为0' a'和1 *号仍为数字

a* (b > 0) 

然后,我们将数组转换为aperm并获取colSums

colSums(aperm(a * (b > 0), c(3, 1, 2)))
#      [,1] [,2] [,3]
#[1,]   10   26   16
#[2,]   22   14   34
#[3,]   12   30   18