R:如何用向量乘以列表元素?

时间:2016-01-15 22:18:49

标签: r list

我想将矩阵列表(一行)相乘,如下所示:

lst <- list("111.2012"=matrix(c(1, 0, 6, NA, 1, 0),
                            nrow = 1, byrow = T),
          "112.2012"=matrix(c(6, 2, 2, 0, 3, NA),
                            nrow = 1, byrow = T))

使用这样的矢量(与每个矩阵的长度相同):

vec <- c(1,2,3,1,2,3)

期待这个结果:

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

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

我到目前为止尝试了这个:

mapply("*", lst, vec) 
Map("*", lst, vec)

这给了我三倍的数字和错误的数字。我还考虑过在mapply中使用lapply来添加列表,但是我不知道该怎么做。有什么建议?感谢

2 个答案:

答案 0 :(得分:5)

我相信您正在寻找lapply(),因为您使用的是列表lapply( lst, FUN= function(x) x*vec)

有关详细信息,请参阅this

希望有所帮助!

lapply(lst,FUN= function(x) x*vec) ## My old clunky way

lapply(lst, "*" , vec) ## As informed by Richard Scriven (Thanks!)

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

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

答案 1 :(得分:1)

Map/mapply通过将函数应用于输入变量的相应元素来工作。对于长度为2的list,我们有2个元素,即lst[[1]]lst[[2]],对于长度为6的vector,它将为6.因此,这会产生不等式。为了纠正这个问题,我们将矢量放在list(通过list包裹)中,以便将其再循环到“{1}”的长度。并将作为整体用于“第一个”中的每个元素。

Map("*", lst, list(vec))
#$`111.2012`
#     [,1] [,2] [,3] [,4] [,5] [,6]
#[1,]    1    0   18   NA    2    0

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