【发布时间】:2013-12-01 22:18:23
【问题描述】:
这个问题是this problem提出的。
考虑两个向量a和b,以及两个数据表dt.a和dt.b如下:
a <- c(55, 1:25)
b <- c(55,30:40)
library(data.table)
dt.a <- data.table(x=a,key="x")
dt.b <- data.table(x=b,key="x")
intersect(a,b)
[1] 55
dt.a[dt.b,nomatch=0]
x
1: 55
目标是计算共同元素的数量。
我的问题是:为什么数据表连接比intersect(...)慢30X
system.time(for (i in 1:1000){intersect(a,b)})
user system elapsed
0.05 0.00 0.04
system.time(for (i in 1:1000){dt.a[dt.b,nomatch=0]})
user system elapsed
1.68 0.00 1.69
【问题讨论】:
-
对于小数据,
[.data.table的开销可能是一个主要因素。尝试更大的数据。此外,joins在设计时考虑了超过 1 列。
标签: r data.table