【问题标题】:Extract object from list using dplyr使用 dplyr 从列表中提取对象
【发布时间】:2016-07-08 23:26:07
【问题描述】:

这与问题12有关

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

gof_stats <- models %>% map(gof_stats)

其中modelsfitdistrplus 创建的模型列表,gof_stats 是计算每个模型的拟合优度统计数据的函数。

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

gof_stats[[1]]$cvm

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

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

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

奖励:如果models 列表中的某些元素是NULL,您将如何处理?

【问题讨论】:

    标签: r dplyr tidyr purrr


    【解决方案1】:

    如果您更喜欢 map 而不是 sapply ,您可以这样做

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

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

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

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

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

    【讨论】:

    • 您能解释一下波浪号~ 在地图解决方案中的作用吗?
    • 参见?map,在参数下,.f如果是公式,例如~ .x + 2...。它也用于示例中。如果您想了解更多详细信息,请查看vignette of the lazyeval package。本质上,~ 用于将后面的表达式强制为公式。
    • 或者只是“cvm”,因为字符串输入被用作索引
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-07
    • 2013-05-17
    • 2015-10-24
    • 2018-07-13
    • 1970-01-01
    • 2013-07-24
    相关资源
    最近更新 更多