合并多维数组

merge multi-dimensional arrays

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

这里是一些示例数据。

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)

谢谢!

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

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

另一个例子:

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

pmax 有一个 na.rm 参数,您可以使用 do.call:

将 ar 作为列表连同该参数一起传递给 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