我有一个包含两个列表列的tibble数据框 . 在列表列 mat_base
中,每行包含一个2x2矩阵 . 在列表列 mat_sim
中,每行包含10个2x2矩阵的列表 . 我想创建一个新的列表列 mat_out
,它是 mat_base
矩阵和每个 mat_sim
矩阵(在给定行内)的总和 . 即 mat_out
的每一行应包含10个矩阵的列表 .
我假设有一种方法可以使用lapply或 purrr
库来执行此操作,但我无法弄明白 . 任何帮助赞赏 .
library(tibble)
library(dplyr)
library(purrr)
mat_base <- list(diag(2) * 1, diag(2) * 2, diag(2) * 3)
mat_sim_a <- replicate(10, matrix(rnorm(4), nrow = 2), simplify = F)
mat_sim_b <- replicate(10, matrix(rnorm(4), nrow = 2), simplify = F)
mat_sim_c <- replicate(10, matrix(rnorm(4), nrow = 2), simplify = F)
dat <- tibble(group = c('a', 'b', 'c')) %>%
mutate(mat_base = mat_base,
mat_sim = list(mat_sim_a, mat_sim_b, mat_sim_c))
# doesn't work
dat %>%
mutate(mat_out = lapply(.$mat_sim, function(x, y) x + y, y = .$mat_base))
# doesn't work
dat %>%
mutate(mat_out = purrr::map(.$mat_sim, function(x, y) x + y, y = .$mat_base))
2 回答
您可以通过在位置而不是实际列表上使用
lapply
来解决问题,从而可以访问嵌套级别:我们可以使用嵌套的
map2
来获取'mat_base'的+
和'mat_sim'来创建'mat_out'作为列