首页 > 解决方案 > 将列表中每个小标题的相同列排列到矩阵的对角线

问题描述

我正在尝试通过将列表的每个小标题中的相同列提取到对角矩阵来创建矩阵列表。请帮我修复错误。

dat <- split(mtcars,list(mtcars$vs,mtcars$am,mtcars$carb))
dat2<-discard(dat,function(x) nrow(x)==0)
dat3<-lapply(dat2, function(x){
    diag(mpg)
})

我得到的错误是

诊断(mpg)中的错误:(列表)对象不能被强制输入'double'

标签: rlistmatrix

解决方案


我们需要mpglapply

lapply(dat2, function(x) diag(x$mpg))

#$`1.0.1`
#     [,1] [,2] [,3]
#[1,] 21.4  0.0  0.0
#[2,]  0.0 18.1  0.0
#[3,]  0.0  0.0 21.5

#$`1.1.1`
#     [,1] [,2] [,3] [,4]
#[1,] 22.8  0.0  0.0  0.0
#[2,]  0.0 32.4  0.0  0.0
#[3,]  0.0  0.0 33.9  0.0
#[4,]  0.0  0.0  0.0 27.3

#....

或者tidyverse使用新的方式group_split

library(tidyverse)

mtcars %>%
  group_split(vs, carb, am) %>%
  map(~diag(.$mpg))

推荐阅读