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

时间:2012-12-06 18:39:27

标签: r data.table

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

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

2 个答案:

答案 0 :(得分:10)

至少有少数情况data.table闪耀:

  • 使用新结果更新现有数据集。由于data.table是引用的,因此massively faster
  • 拆分 - 应用 - 组合类型策略与大量群组分开(如@PaulHiemstra的回答指出)。
  • 几乎可以对真正大的数据集做任何事情。

以下是一些基准测试: Benchmarking data.frame (base), data.frame(package dataframe) and data.table

答案 1 :(得分:7)

data.table快速发布的一个实例是split-apply-combine类型的工作,它使plyr成名。假设您有一个data.frame,其中包含以下数据:

precipitation     time   station_id
23.3              1      A01
24.1              2      A01
26.1              1      A02
etc etc

当您需要平均每个电台ID时,您可以使用许多R功能,例如: aveddplydata.table。如果station_id中的唯一元素数量增加,则data.table可以很好地扩展,例如ddply变得非常慢。更多详细信息,包括示例,可以在this post on my blog中找到。该测试表明速度增加超过150倍是可能的。这种差异可能会大得多......