【问题标题】:Arrange the same column of each tibble in a list to a diagonal of a matrix将列表中每个小标题的同一列排列到矩阵的对角线
【发布时间】:2019-04-18 23:12:23
【问题描述】:

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

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'

【问题讨论】:

  • 不应该diag(mpg)diag(x) 吗?
  • 您的预期输出是什么样的?也许像lapply(dat2, function(x) diag(x$mpg)) 之类的?
  • Ronak,你明白了。是的!这就是我一直在寻找的输出。

标签: r list matrix


【解决方案1】:

我们需要提取lapply中的mpg

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-30
    • 1970-01-01
    • 2011-11-29
    • 1970-01-01
    相关资源
    最近更新 更多