0

这与问题12有关

我有一个对象列表(在我的情况下,它们也是 AFAII 列表),通过运行返回:

gof_stats <- models %>% map(gof_stats)

wheremodels是由创建的模型列表,fitdistrplus并且gof_stats是计算每个模型的拟合优度统计的函数。

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

gof_stats[[1]]$cvm

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

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

有没有办法使用dplyr/purrr语法做同样的事情?

奖金:您将如何处理models列表中某些元素的情况NULL

4

1 回答 1

6

如果你喜欢map这个sapply,你可以做

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

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

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

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

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

于 2016-07-08T23:41:46.683 回答