R 求一个矩阵列表的和,两个约束在NA上

R 求一个矩阵列表的和,两个约束在NA上,r,list,matrix,na,R,List,Matrix,Na,我有一个矩阵列表或类似矩阵的列表。每个矩阵包含许多NAs。 现在我想把所有的矩阵加在一个矩阵上。(每个矩阵具有相同的维度和DIMNAME) 经过计算,我想要一个这样的结果 V1 V2 V3 [1,] NA 4 22 [2,] 5 0 16 所以我有两个限制: constraint 1: keep (NA+NA)=NA constra

我有一个矩阵列表或类似矩阵的列表。每个矩阵包含许多NAs。 现在我想把所有的矩阵加在一个矩阵上。(每个矩阵具有相同的维度和DIMNAME)

经过计算,我想要一个这样的结果

        V1          V2          V3            
  [1,]   NA       4           22
  [2,]   5        0           16   
所以我有两个限制:

constraint 1: keep (NA+NA)=NA
constraint 2: keep (NA+1) = 1
我尝试了
Reduce
apply(simplify2array(.list),c(1,2),sum,na.rm=T)
函数,如下页所示,但我无法在计算中保留这两个约束

就个人而言,使用上面的示例,我使用
is.na
来识别每个矩阵中的所有
na
,重叠每个元素的逻辑值(a+b),意味着如果对应的单元格都是NAs,则返回长度(mylist),例如2。然后用
NA

c = is.na(a)  return 

           V1          V2          V3           
      [1,] 1        0         0
      [2,] 1        1         0 

d = is.na(b)  return 

           V1          V2          V3            
      [1,]  1        1           0
      [2,]  0        0           0

identify.na = c + d return 
           V1          V2          V3            
      [1,]  2        1           0
      [2,]  1        1           0

result[identify.na==2] = NA
例如,example并不是R中的代码。
提前感谢。

我们可以
cbind
矩阵的向量('m1'),获取'm1'的
行和
,创建'v2',获取逻辑矩阵的
行和
,创建'v1'。将“v2”中“v1”中为0的元素替换为NA

 m1 <- cbind(a, b)
 v1 <- rowSums(!is.na(m1))
 v2 <- rowSums(m1, na.rm=TRUE)
 v2[!v1] <- NA
 #[1] NA  1  5  0
数据
a
 m1 <- cbind(a, b)
 v1 <- rowSums(!is.na(m1))
 v2 <- rowSums(m1, na.rm=TRUE)
 v2[!v1] <- NA
 #[1] NA  1  5  0
l1 <- list(a1, b1)
res <- Reduce(`+`, lapply(l1, function(x)
                      replace(x, is.na(x), 0)))
res*NA^!Reduce(`+`, lapply(l1, function(x) !is.na(x)))
#     [,1] [,2] [,3]
#[1,]   NA    4   22
#[2,]    5    0   16
 a <- c(NA, 1, 2, -1)
 b <- c(NA, NA, 3, 1)
 a1 <- matrix(c(NA, NA, 4, NA, 21, 4), ncol=3)
 b1 <- matrix(c(NA, 5, NA, 0, 1, 12), ncol=3)