首页 > 解决方案 > 列表列表列表到带有 purrr 的数据框中

问题描述

假设我们有以下列表结构:

bla <- list(lda = list(list(auc1 = 0.85, auc2 = 0.56), list(auc1 = 0.65, auc2 = 0.72)),
            j48 = list(list(auc1 = 0.99, auc2 = 0.81), list(auc1 = 0.61, auc2 = 0.85)),
            c50 = list(list(auc1 = 0.92, auc2 = 0.59), list(auc1 = 0.68, auc2 = 0.80)))

所需的输出是一个结构如下的数据帧:

    auc1 auc2
lda 0.85 0.56
lda 0.65 0.72
j48 0.99 0.81
j48 0.61 0.85
c50 0.92 0.59
c50 0.68 0.80

我的尝试粘贴在下面。我可以使用调用分别对每个内部列表发出呼噜声:

bla[[1]] %>%
    map(., function(x) c(auc1 = x[["auc1"]],
                         auc2 = x[["auc2"]])) %>%
    map_dfr(., as.list)

任何想法都值得赞赏。

标签: rtidyversepurrr

解决方案


令人惊讶的是,只有使用bind_rows才能为您提供所需的东西。

dplyr::bind_rows(bla)

这将返回一个 tibble 并且 tibbles 没有行名。


您可以使用do.call+在基础 R 中执行此操作rbind

do.call(rbind, unlist(bla, recursive = FALSE))


#     auc1 auc2
#lda1 0.85 0.56
#lda2 0.65 0.72
#j481 0.99 0.81
#j482 0.61 0.85
#c501 0.92 0.59
#c502 0.68 0.8 

推荐阅读