将列表中每个小标题的同一列排列到矩阵的对角线

时间:2019-04-18 23:12:24

标签: r list matrix

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

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)
})

我得到的错误是

  

diag(mpg)中的错误:(list)对象不能强制输入'double'

1 个答案:

答案 0 :(得分:2)

我们需要在mpg中提取lapply

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))