使用 dplyr 从列表中提取对象

Extract object from list using dplyr

这与问题1 and 2

有关

我有一个对象列表(在我的例子中它们也是 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,您将如何处理?

如果你更喜欢map而不是sapply,你可以

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

如果你只是喜欢管道,你可以这样做

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

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

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