将嵌套列表中的所有矩阵相乘
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 个矩阵的列表,每个矩阵都是 A
、G
、M_1
、M_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(`%*%`))
我有一个包含 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 个矩阵的列表,每个矩阵都是 A
、G
、M_1
、M_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(`%*%`))