R:将矩阵与0和NAs相乘,在列表上产生不同的结果

R:将矩阵与0和NAs相乘,在列表上产生不同的结果,r,list,R,List,我想乘以矩阵,一个包含值和0,另一个包含而不是0 NAs(这很重要)。这是一个关于两个旧问题(和)的新问题,因为我无法将这两个答案结合到最终解决方案中。以下是一些示例数据: A <- list("111"= matrix(c(NA,NA,100,200,NA,NA), nrow = 1, byrow = T), "112"= matrix(c(10,90,NA,30,10,90),

我想乘以矩阵,一个包含值和0,另一个包含而不是0 NAs(这很重要)。这是一个关于两个旧问题(和)的新问题,因为我无法将这两个答案结合到最终解决方案中。以下是一些示例数据:

A <- list("111"= matrix(c(NA,NA,100,200,NA,NA),
                             nrow = 1, byrow = T),
          "112"= matrix(c(10,90,NA,30,10,90),
                             nrow = 1, byrow = T))
B <- list("111.2012"=matrix(c(1, 0, 6, 0, 1, 0),
                             nrow = 1, byrow = T),
           "112.2012"=matrix(c(6, 2, 2, 0, 3, 1),
                             nrow = 1, byrow = T),
           "111.2011"=matrix(c(3, 2, 0, 0, 1, 9),
                             nrow = 1, byrow = T),
           "112.2011"=matrix(c(1, 2, 0, 0, 7, 0),
                             nrow = 1, byrow = T))
通过将0(在B中)与值(在a中)相乘,我得到0,并将值(在B中)与NA(在a中)相乘,我得到NA,这对我来说是真实的和完全正确的。然而,当我将0(B)与NA(A)相乘时,我得到了NA,这可能是真的。但是有没有办法得到0(这是我的问题2,但不包括1)

为此,我得到了答案(问题2):


注意:在元素一($'111.2012')中,第二个和第六个条目是0,就像元素四($'112.2011')第三个条目一样。

只需添加一个
replace
,即
Map(函数(x,y)replace(a[[y]],x==0,0)*x,B,gsub('\..*','',名称(B))
 Map(function(x,y) A[[y]]*x, B, gsub('\\..*','',names(B))) 
B*`[<-`(A,B==0,0)
Map(function(x,y) A[[y]]*`[<-`(x,A[[y]]==0,0),B,sub('\\..*','',names(B)))
> res
$`111.2012`
     [,1] [,2] [,3] [,4] [,5] [,6]
[1,]   NA    0  600    0   NA    0

$`112.2012`
     [,1] [,2] [,3] [,4] [,5] [,6]
[1,]   60  180   NA    0   30   90

$`111.2011`
     [,1] [,2] [,3] [,4] [,5] [,6]
[1,]   NA   NA    0    0   NA   NA

$`112.2011`
     [,1] [,2] [,3] [,4] [,5] [,6]
[1,]   10  180    0    0   70    0