本文介绍了为什么 expand.grid 比 data.table 的 CJ 快?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

> system.time(expand.grid(1:1000,1:10000))
   user  system elapsed 
   1.65    0.34    2.03 
> system.time(CJ(1:1000,1:10000))
   user  system elapsed 
   3.48    0.32    3.79 

推荐答案

感谢您报告此问题.这已在 data.table 1.8.9 中修复.这是最新提交 (913) 的计时测试:

Thanks for reporting this. This has been fixed now in data.table 1.8.9. Here's the timing test with the latest commit (913):

system.time(expand.grid(1:1000,1:10000))
# user system elapsed
# 1.420 0.552 1.987

system.time(CJ(1:1000,1:10000))
# user system elapsed
# 0.080 0.092 0.171

来自 新闻:

CJ() 在 1e6 行(例如)上快 90%,#4849.现在,输入在合并之前先排序,而不是在合并之后排序,并使用 rep.int 而不是 rep(感谢 Sean Garborg 的想法、代码和基准测试),并且仅在 is.unsorted() 时才排序,#2321.

还可以查看新闻以了解其他值得注意的功能和错误修复;例如,CJ() 也获得了一个新的 sorted 参数.

Also check out NEWS for other notable features that have made it in and bug fixes; e.g., CJ() gains a new sorted argument too.

这篇关于为什么 expand.grid 比 data.table 的 CJ 快?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!