R中列表中所有矩阵的元素乘法

时间:2017-09-14 13:55:35

标签: r list matrix matrix-multiplication

我有一个矩阵列表。我需要将它们相乘。通常如果我们有矩阵A和B并且需要R中的矩阵乘法,我们使用

A*B

但在这种情况下我似乎无法与lapply合作。如果我的矩阵列表被称为l1并且我使用了lapply(l1,*),我得到一个错误,如果我使用lapply(l1,prod),它会给我每个矩阵中所有元素的乘积。

示例:

> l1
[[1]]
     [,1] [,2]
[1,]    2    5
[2,]    3    7

[[2]]
     [,1] [,2]
[1,]    3    7
[2,]    5    9

[[3]]
     [,1] [,2]
[1,]    5    8
[2,]    1    2

期望的输出:

 l1
      [,1] [,2]
[,1]   30   280
[,2]   15   126

1 个答案:

答案 0 :(得分:5)

lapply遍历一个向量/列表,但它只能迭代地将一个元素传递给一个函数。你想迭代地将元素传递给二元函数(例如,对于标量计算累积积),你可以使用Reduce

Reduce("*", 1:3) == prod(1:3)
#[1] TRUE

使用您的清单:

l1 <- list(matrix(c(2,3,5,7),2),
           matrix(c(3,5,7,9),2),
           matrix(c(5,1,8,2),2))
Reduce("*", l1)
#     [,1] [,2]
#[1,]   30  280
#[2,]   15  126