我试图通过将列表的每个小标题中的相同列提取到对角矩阵来创建矩阵列表。请帮助我修复错误。
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'
答案 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))