在 dplyr 中计算、收集和折叠做啥?
Posted
技术标签:
【中文标题】在 dplyr 中计算、收集和折叠做啥?【英文标题】:What do compute, collect, and collapse do in dplyr?在 dplyr 中计算、收集和折叠做什么? 【发布时间】:2017-05-15 07:22:22 【问题描述】:我现在正在学习 R 中的 dplyr
包,但在理解三个功能 - compute
、collect
和 collapse
- 的作用时碰壁了。
我了解dplyr
在内部不使用data.frame
类型;而是将其数据存储到自己的类型tbl
或tbl_df
。
然后,为了将自定义类型转换回 R 的默认 data.frame
以利用 data.frame
上的一组默认函数,您必须使用 collect
,例如:
batting <- tbl(lahman_sqlite(), "Batting")
dim(collect(batting))
截至 2016 年,这将返回 [1] 99846 22
,而 dim(batting)
返回 [1] NA 22
。
但是,我不确定其他两个函数 - compute
和 collapse
- 是做什么的。如果您通过?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函数计算分组占比实战