我有一个矩阵列表。我需要将它们相乘。通常如果我们有矩阵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
答案 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