合并多维数组

时间:2015-01-14 00:20:21

标签: arrays r

我有一个数组列表,其中每个数组只有2个带数字的元素,否则为NA。在所有数组中,任何给定元素只有一个数字。

这是一些示例数据。

ar1=array(NA,dim=c(2,3,4))
ar1[1,1,1]=100
ar2=array(NA,dim=c(2,3,4))
ar2[2,3,4]=200
ar3=array(NA,dim=c(2,3,4))
ar3[2,1,4]=300
ar=list(ar1,ar2,ar3)

谢谢!

2 个答案:

答案 0 :(得分:5)

pmax有一个na.rm参数,您可以使用do.call将ar作为列表与pmax一起传递给pmax:

> do.call(pmax, c(ar,  na.rm=TRUE) )
, , 1

     [,1] [,2] [,3]
[1,]  100   NA   NA
[2,]   NA   NA   NA

, , 2

     [,1] [,2] [,3]
[1,]   NA   NA   NA
[2,]   NA   NA   NA

, , 3

     [,1] [,2] [,3]
[1,]   NA   NA   NA
[2,]   NA   NA   NA

, , 4

     [,1] [,2] [,3]
[1,]   NA   NA   NA
[2,]  300   NA  200

答案 1 :(得分:3)

您可以将Reduce与任何忽略NA s的矢量化函数一起使用:

Reduce(function(x, y) ifelse(!is.na(x), x, y), ar)

另一个例子:

library(functional)
Reduce(Curry(pmax, na.rm = TRUE), ar)