使用dplyr从列表中提取对象

时间:2016-07-08 23:26:08

标签: r dplyr tidyr purrr

这与问题12

有关

我有一个对象列表(在我的例子中,它们也是AFAII列表),由运行返回:

gof_stats <- models %>% map(gof_stats)

其中models是由fitdistrplus创建的模型列表,而gof_stats是一个计算每个模型的拟合度数据的函数。

现在,如果我想从该列表中提取特定的统计数据,我可以执行以下操作:

gof_stats[[1]]$cvm

获得Cramer von Mises的统计数据。我可以在整个列表中实现相同的目标(根据链接的问题),如下所示:

cvms <- sapply(gof_stats, "[[", "cvm")

有没有办法使用dplyr / purrr语法执行相同操作?

奖励:您如何处理models列表中的某些元素为NULL的情况?

1 个答案:

答案 0 :(得分:5)

如果您更喜欢mapsapply,则可以

library(purrr)
map(gof_stats, ~ .x[["cvm"]])

如果您喜欢管道,那么

gof_stats %>% sapply("[[", "cvm")

您的问题是关于列表,而不是数据框,因此dplyr并不适用。您可能希望查找?magrittr::multiply_by以查看定义%>%的包中的其他别名列表,因为您似乎喜欢使用管道。例如,magrittr::extract2[[的别名,可以很容易地在管道链的中间使用。

至于你的奖金,我会在尝试提取内容之前预先过滤列表以删除NULL元素。