r - 将列表中每个小标题的相同列排列到矩阵的对角线
问题描述
我正在尝试通过将列表的每个小标题中的相同列提取到对角矩阵来创建矩阵列表。请帮我修复错误。
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'
解决方案
我们需要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))
推荐阅读
- excel - 在Excel中使用连接函数将两个单元格合并为一个
- java - 如何在个人 linux 裸机上管理微服务?
- php - 消息:未定义索引:图像更新图像 PHP
- python - 从python中的矩阵向量化所有组合的角度计算
- java - 现在以 16 位十六进制(16 个字符)获取时间和日期
- visual-studio-code - VS Code 的扩展图标消失了,为什么?
- javascript - 如果不匹配,数组中的 Javascript 对象仍然会被删除
- c# - 如何在 HttpRequestMessage 中传递图像文件?
- kotlin - 有没有办法实现`Comparable
` 与代表团? - c# - 将证书导入 Azure 密钥库:操作返回了无效的状态代码“冲突”