Mic*_*ael 28 r data.table
> 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
Run Code Online (Sandbox Code Playgroud)
Aru*_*run 29
感谢您报告此事.现在已在data.table 1.8.9中修复了这个问题.这是最新提交的时序测试(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
Run Code Online (Sandbox Code Playgroud)
来自新闻:
CJ()在1e6行(例如)#4849上快90%.输入现在首先在组合之前进行排序,而不是在组合之后进行排序,并使用rep.int而不是rep(感谢Sean Garborg的想法,代码和基准),并且仅在is.unsorted(),#2321时进行排序.
另请查看NEWS以了解其他值得注意的功能并修复错误; 例如,也CJ()获得了新的sorted论点.
Mnel的猜测是正确的.CJ返回一个data.table,其中每列都是一个键.
> DT <- CJ(1:100,1:100)
> key(DT)
[1] "V1" "V2"
Run Code Online (Sandbox Code Playgroud)
更公平的比较:
> system.time(CJ(1:1000,1:10000))
user system elapsed
3.40 0.25 3.73
> system.time(data.table(expand.grid(1:1000,1:10000),key=c("Var1","Var2")))
user system elapsed
4.14 0.68 4.90
Run Code Online (Sandbox Code Playgroud)