【发布时间】:2018-07-28 07:31:00
【问题描述】:
我有一个带有两个列表列的 tibble 数据框。在列表列mat_base 中,每一行都包含一个 2x2 矩阵。在列表列mat_sim 中,每一行包含一个由 10 个 2x2 矩阵组成的列表。我想创建一个新的列表列mat_out,它是mat_base 矩阵和每个mat_sim 矩阵(在给定行内)的总和。 IE。 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))
【问题讨论】: