我有一个对象列表(在我的例子中,它们也是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
的情况?
答案 0 :(得分:5)
如果您更喜欢map
到sapply
,则可以
library(purrr)
map(gof_stats, ~ .x[["cvm"]])
如果您喜欢管道,那么
gof_stats %>% sapply("[[", "cvm")
您的问题是关于列表,而不是数据框,因此dplyr
并不适用。您可能希望查找?magrittr::multiply_by
以查看定义%>%
的包中的其他别名列表,因为您似乎喜欢使用管道。例如,magrittr::extract2
是[[
的别名,可以很容易地在管道链的中间使用。
至于你的奖金,我会在尝试提取内容之前预先过滤列表以删除NULL
元素。