什么时候值得使用`data.table`?我什么时候能期望获得最大的性能提升?

use*_*795 13 r data.table

我只是花了一些时间研究data.tableR,并且想知道我可以期待最大性​​能提升的条件.也许简单的答案是当我有一个大型data.frame并经常在这个data.frame的子集上运行.当我只是加载数据文件和估计模型时,我不能期望太多,但许多[操作会产生差异.这是真的吗,唯一的答案还是我应该考虑什么?什么时候开始重要?10x5,1,000x5,1,000,000x5?

编辑:一些评论表明,这data.table通常更快,同样重要,几乎从不慢.因此,知道何时不使用也是一件好事data.table.

Ari*_*man 10

至少有几个案例data.table闪耀:

  • 使用新结果更新现有数据集.因为data.table是参考,所以速度更快.
  • 分裂 - 应用 - 组合类型策略与大量群组分开(如@PaulHiemstra的答案指出).
  • 几乎可以对真正大的数据集做任何事情.

以下是一些基准测试:对data.frame(base),data.frame(包数据帧)和data.table进行基准 测试


Pau*_*tra 7

data.table快速发展的一个例子就是分裂 - 应用 - 组合类型的工作,这种工作plyr很有名.假设您拥有data.frame以下数据:

precipitation     time   station_id
23.3              1      A01
24.1              2      A01
26.1              1      A02
etc etc
Run Code Online (Sandbox Code Playgroud)

当你需要每站ID来平均,您可以使用R里面的函数,例如主机ave,ddplydata.table.如果增加的独特元素的数量station_id,data.table鳞片真的很好,而例如ddply得到真的很慢.更多详细信息,包括示例,可以在我的博客上的这篇文章中找到.该测试表明速度增加超过150倍是可能的.这种差异可能会大得多......

  • `plyr`,`dplyr`的下一次迭代将会反击(表现明智).应该快10-100倍,并且在`data.table`速度的10倍之内.(全部使用纯R).它还允许您使用`data.table`作为后端,因此您可以充分利用这两个世界. (5认同)