在 dplyr 中计算、收集和折叠做啥?

Posted

技术标签:

【中文标题】在 dplyr 中计算、收集和折叠做啥?【英文标题】:What do compute, collect, and collapse do in dplyr?在 dplyr 中计算、收集和折叠做什么? 【发布时间】:2017-05-15 07:22:22 【问题描述】:

我现在正在学习 R 中的 dplyr 包,但在理解三个功能 - computecollectcollapse - 的作用时碰壁了。

我了解dplyr 在内部不使用data.frame 类型;而是将其数据存储到自己的类型tbltbl_df

然后,为了将自定义类型转换回 R 的默认 data.frame 以利用 data.frame 上的一组默认函数,您必须使用 collect,例如:

batting <- tbl(lahman_sqlite(), "Batting")
dim(collect(batting))

截至 2016 年,这将返回 [1] 99846 22,而 dim(batting) 返回 [1] NA 22

但是,我不确定其他两个函数 - computecollapse - 是做什么的。如果您通过?collect 进行检查,则文档说明如下:

说明:

‘compute’ 强制计算惰性 tbls,将数据留在 远程源。 “收集”也强制计算,但会带来 数据返回到 R data.frame(存储在“tbl_df”中)。 '坍塌' 不强制计算,而是将复杂的 tbl 折叠成一个表单 可以施加额外的限制。

这是什么意思,特别是强制计算惰性 tlbs


更新

我想知道这些函数的作用,并想弄清楚其中一个做什么,其他不做什么。

【问题讨论】:

对于投票结束这个问题的人,你能解释一下为什么你认为这太板了,我该如何改进它?我的观点是这三个函数分别做什么。 我没有投票结束,但我可以看到两个投票结束的类别是“太宽泛:可能的答案太多,或者好的答案会对于这种格式来说太长了。请添加详细信息以缩小答案集或隔离可以在几段中回答的问题。" @Ben 是的,我查过了,但我什至不确定为什么它太宽泛了。 我认为大多数人在新的r 问题上都在寻找可以复制粘贴、在计算机上运行并进行故障排除的代码,以获得发布者指定的特定结果。不符合这种模式的问题往往会受到拒绝/关闭投票的惩罚,我想这就是这里发生的事情。 我不打算作为答案发布,因为我不确定自己,但是: lazy tbl 表示已指定操作的 tbl,但不一定执行(因为还不需要):见 en.wikipedia.org/wiki/Lazy_evaluation , ***.com/questions/tagged/… 【参考方案1】:

来自dplyr vignettes之一:

有三种方法可以强制计算查询:

collect() 执行查询并将结果返回给 R。

compute() 执行查询并将结果存储在临时 数据库中的表。

collapse() 将查询转换为表表达式。

collect() 是您最常使用的函数。一旦你到达集合 您想要的操作,您使用collect() 将数据拉到本地 tbl_df()。如果你知道 SQL,你可以使用compute()collapse() 来 优化性能。

如果这没有帮助,最好的办法可能是研究每个函数的源代码。您可以在此处查看有关如何执行此操作的说明:How do I see the help for the `dplyr::collect` method?

【讨论】:

大概,阅读过文档(如 OP 所示)并在此处询问的人会发现源代码不太容易理解,不是吗?

以上是关于在 dplyr 中计算、收集和折叠做啥?的主要内容,如果未能解决你的问题,请参考以下文章

使用 dplyr 和 broom 在训练和测试集上计算 kmeans

使用 dplyr、group_by 和折叠或汇总连接字符串/行,但保持 NA 值 [重复]

使用 dplyr 和 RcppRoll 计算所有固定窗口平均值

R语言dplyr包使用dplyr函数使用group_by函数summarise函数和mutate函数计算分组占比实战

如何在 R 中使用 dplyr mutate 函数来计算运行余额?

使用 dplyr 计算行中的值数