R 什么时候值得使用“data.table”?我什么时候可以期望获得最大的性能增益?

R 什么时候值得使用“data.table”?我什么时候可以期望获得最大的性能增益?,r,data.table,R,Data.table,我只是花了一些时间研究R中的data.table,想知道在什么条件下可以获得最大的性能增益。也许简单的答案是当我有一个大的data.frame并且经常对这个data.frame的子集进行操作时。当我只加载数据文件和估计模型时,我不能期望太多,但是许多 [< /代码>操作]产生了不同。这是真的,唯一的答案,或者我应该考虑什么?什么时候开始变得重要?10x5,1000 x5,100000×x5?< /p> 编辑:一些评论表明,数据。表通常更快,同样重要的是,几乎从不慢。因此,最好知道什么时候不使用数

我只是花了一些时间研究R中的
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数据库作为后端。