我有一个数组列表,其中每个数组只有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)
谢谢!
答案 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)