R 什么时候值得使用“data.table”?我什么时候可以期望获得最大的性能增益?
我只是花了一些时间研究R中的R 什么时候值得使用“data.table”?我什么时候可以期望获得最大的性能增益?,r,data.table,R,Data.table,我只是花了一些时间研究R中的data.table,想知道在什么条件下可以获得最大的性能增益。也许简单的答案是当我有一个大的data.frame并且经常对这个data.frame的子集进行操作时。当我只加载数据文件和估计模型时,我不能期望太多,但是许多 [< /代码>操作]产生了不同。这是真的,唯一的答案,或者我应该考虑什么?什么时候开始变得重要?10x5,1000 x5,100000×x5?< /p> 编辑:一些评论表明,数据。表通常更快,同样重要的是,几乎从不慢。因此,最好知道什么时候不使用数
data.table
,想知道在什么条件下可以获得最大的性能增益。也许简单的答案是当我有一个大的data.frame并且经常对这个data.frame的子集进行操作时。当我只加载数据文件和估计模型时,我不能期望太多,但是许多<代码> [< /代码>操作]产生了不同。这是真的,唯一的答案,或者我应该考虑什么?什么时候开始变得重要?10x5,1000 x5,100000×x5?< /p>
编辑:一些评论表明,
数据。表
通常更快,同样重要的是,几乎从不慢。因此,最好知道什么时候不使用数据。表
数据。表速度非常快的一个实例是使plyr
出名的拆分-应用-组合工作类型。Say您有一个包含以下数据的数据框
:
precipitation time station_id
23.3 1 A01
24.1 2 A01
26.1 1 A02
etc etc
当您需要平均每个站点id时,您可以使用大量R函数,例如
ave
、ddply
或data.table
。如果station\u id
中的唯一元素数量增加,data.table
的伸缩性非常好,而ddply
的速度非常慢。更多详细信息,包括一个示例,can可以在中找到。该测试表明速度可能会增加150倍以上。这种差异可能会更大……至少在少数情况下,数据。表
显示:
- 使用新结果更新现有数据集。因为
是通过引用进行的,所以这是data.table
- 拆分应用组合型策略,将大量组拆分(正如@PaulHiemstra的回答所指出的)
- 对真正大的数据集几乎做任何事情
这是一个很好的问题(如果范围很广)。理想情况下,可以通过指向计时小插曲(),但在这一点上它还没有开发。不过,我相信Matthew Dowle会非常感谢您对它或类似文档的帮助!值得一提的是,使用
数据.table
可能永远不会比使用数据.frame
慢(如果您找到一个案例,我打赌它会很快得到修补)。除了计算速度外,data.table
解决方案可能需要更少的按键次数。因为GSee所说的在我的经验中是正确的,并且在一般情况下data.table继承自data.frame,我认为这个问题可以更好地提出来,比如什么时候不使用data.table。我想用它做的唯一不能做的事情是使用rbind.fill()很好的评论,到目前为止都是很好的答案!franks,我将把这一点添加到我的questions@frankc+1但是,rbind.fill
有什么问题吗?这对我来说很好:rbind.fill(as.data.table(mtcars[c(“mpg”,“wt”))),as.data.table(mtcars[c(“wt”,“cyl”))
。plyr
的下一次迭代,即dplyr
,将进行反击(性能方面)。应该快10-100倍,并且在数据速度的10倍以内。表
(也都使用纯R)。它还可以让你使用数据.table
作为后端,这样你就可以两全其美了。这真是太棒了!它什么时候发布?是的,听起来太棒了!收益来自哪里?与数据的集成是如何工作的?是后端的一个选项还是基于传递的参数?@PaulHiemstra接下来的6个月,一切进展顺利。收益来自于专门化plyr最常见的部分(例如,ddply+子集/摘要/变异/排列)和最小化生成的数据帧中间子集的数量。它还将支持SQL数据库作为后端。