使用 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
个元素。
这与问题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
个元素。