将嵌套列表中的所有矩阵相乘

Multiply all the matrices in a nested list together

我有一个包含 4 个矩阵的列表

A = list(a = matrix(1:4, 2), b = matrix(2:5, 2))

G = list(a = matrix(10:13, 2), b = matrix(5:8, 2))

M_1 = list(a = matrix(10:13, 2), b = matrix(5:8, 2))

M_2 = list(a = matrix(2:5, 2), b = matrix(5:8, 2))

dlist <- pmap(list(A, G, M_1, M_2), list) %>% 
  simplify() %>%
  map(.,
    ~{names(.) <-  c("A",
                     "G",
                     "M_1",
                     "M_2"); .}) 

我使用上面的管道而不是 dlist <- list(A,G,M_1, M2) 因为我想保留嵌套列表的名称。

我需要一个包含 4 个矩阵的列表,每个矩阵都是 AGM_1M_2 中所有元素的乘积。下面的代码给了我一个列表 2,a,和 b,其中 a 是所有四个列表中名为 a 的所有矩阵的乘积(A , G, M_1, M_2); b.

也类似
res <- dlist  %>%
  map(., ~{Reduce( "%*%", .)}) 

res
$a
     [,1]  [,2]
[1,] 5519  9859
[2,] 8220 14684

$b
     [,1]  [,2]
[1,] 5866  7970
[2,] 7773 10561

我之前好像没找到类似的问题。如何修复我的代码?非常感谢。

tibble::lst() 创建 self-named 个列表(类似于 data.frame)。

map(lst(A, G, M_1, M_2), \(x) x[[1]] %*% x[[2]])

或者更难理解

map(lst(A, G, M_1, M_2), lift(`%*%`))

(或者,当然)

lst(A, G, M_1, M_2) %>% map(lift(`%*%`))