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

dig*_*vee 0 r list matrix matrix-multiplication

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

A*B
Run Code Online (Sandbox Code Playgroud)

但在这种情况下,我似乎无法使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
Run Code Online (Sandbox Code Playgroud)

所需的输出:

 l1
      [,1] [,2]
[,1]   30   280
[,2]   15   126
Run Code Online (Sandbox Code Playgroud)

Rol*_*and 5

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

Reduce("*", 1:3) == prod(1:3)
#[1] TRUE
Run Code Online (Sandbox Code Playgroud)

与您的清单:

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
Run Code Online (Sandbox Code Playgroud)