在这篇帖子之后:multicore and data.table in R,我想知道在使用数据时是否有一种方法可以使用所有内核.表,通常按组进行计算,可以并行化.plyr似乎在设计上允许这样的操作.

推荐答案

首先要判断的是,data.table个常见问题3.1第2点已经深入:

只为最大的组分配一个内存,然后

这是一个原因.表格分组很快.但这种方法不适合并行化.并行化意味着将数据复制到其他线程,而不是耗费时间.但是,我的理解是,不管怎样,data.table分组通常比.parallel分组的plyr分组快.这取决于每组任务的计算时间,以及计算时间是否可以轻松减少.移动数据通常占主导地位(在对1或3次大型数据任务运行进行基准测试时).

More often, so far, it's actually some gotcha that's biting in the j expression of [.data.table. For example, recently we saw poor performance from data.table grouping but the culprit turned out to be min(POSIXct) (Aggregating in R over 80K unique ID's). Avoiding that gotcha yielded over 50 times speedup.

So the mantra is: 100, 100, 100.

此外,同一常见问题的第1点可能很重要:

只有该列被分组,其他19列被忽略,因为

所以,data.table真的完全没有遵循拆分-应用-合并的模式.它的工作原理不同.split-apply-combine有助于并行化,但它实际上无法扩展到 Big Data .

另见数据中的脚注3.表简介小插曲:

我们想知道有多少人正在部署并行技术来编写代码

这是想说"当然,并行速度明显更快,但一个高效的算法到底需要多长时间?".

但是,如果您已经分析过(使用Rprof),并且每个组的任务都是计算密集型的,那么datatable help上的3篇帖子(包括"多核"一词)可能会有所帮助:

multicore posts on datatable-help

当然,在很多任务中,数据并行化会很好.桌子,有一种方法可以做到.但这项工作还没有完成,因为通常其他因素会起作用,所以它的优先级很低.如果你可以用虚拟基准测试来提高测试结果的优先级,那么这将有助于提高测试结果的可重复性.

R相关问答推荐

R包terra在投影时如何决定模板格栅属性?

在R中,如何创建时间间隔的图表?

R -模运算后的加法

如何创建构成多个独立列条目列表的收件箱框列?

对lme 4对象运行summary()时出错(diag中的错误(from,names = RST):对象unpackedMatrix_diag_get找不到)

在垂直轴中包含多个ggplot2图中的平均值

如何写一个R函数来旋转最后n分钟?

在某些栏和某些条件下,替换dfs列表中的NA

如何在所有绘图中保持条件值的 colored颜色 相同?

如何从像glm这样的模型中提取系数表的相关性?

如何同时从多个列表中获取名字?

如何在ggplot2中创建多个y轴(每个变量一个)

解析嵌套程度极高的地理数据

R中时间间隔的大向量与参考时间间隔的相交

是否有可能从边界中找到一个点值?

如何为混合模型输出绘制不同的线型?

将文本批注减少到gglot的y轴上的单个值

在使用SliderInput In Shiny(R)设置输入数据的子集时,保留一些情节痕迹

R-使用stri_trans_General()将其音译为德语字母

在鼠标悬停时使用Plotly更改geom_point大小