我有一个数组列表,每个数组只有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)
谢谢!
pmax有一个na.rm参数,您可以将ar作为列表与该参数一起传递给pmax和do.call:
> 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
NA
的向量化函数,结合 Reduce
使用:Reduce(function(x, y) ifelse(!is.na(x), x, y), ar)
另一个例子:
library(functional)
Reduce(Curry(pmax, na.rm = TRUE), ar)
"%|%" <- function(x, y) ifelse(!is.na(x), x, y)
来创建一个。然后可以像这样做:c(1, NA) %|% c(NA, 2)
。 - flodelpmax
- pmax(c(1, NA),c(NA, 2),na.rm=TRUE)
。 - thelatemail1 %|% 2
返回 2
。我想要的通用函数只有在第一个值为 NA
时才使用第二个值。例如,x %|% 0
将把 x
中的所有 NA
替换为零。我在任何地方都使用 ifelse
结构,并希望有一个二元运算符代替它。(我知道这里不适用,所以对于手头的问题,pmax
是可以的) - flodel
c(2, 3, 4)
的数组,其中包含三个非 NA 值? - flodel