小编mww*_*mww的帖子

data.table:向量扫描v用数字列进行二进制搜索 - 超慢setkey

我试图找到通过几个数字列对大型数据集进行子集化的最快方法.正如data.table所承诺的那样,二进制搜索所花费的时间比矢量扫描要快得多.但是,二进制搜索需要预先执行setkey.正如您在此代码中看到的那样,需要非常长的时间!考虑到这段时间后,矢量扫描要快得多:

set.seed(1)
n=10^7
nums <- round(runif(n,0,10000))
DT = data.table(s=sample(nums,n), exp=sample(nums,n), 
         init=sample(nums,n), contval=sample(nums,n))
this_s = DT[0.5*n,s] 
this_exp = DT[0.5*n,exp]
this_init = DT[0.5*n,init]
system.time(ans1<-DT[s==this_s&exp==this_exp&init==this_init,4,with=FALSE])
#   user  system elapsed 
#   0.65    0.01    0.67 
system.time(setkey(DT,s,exp,init))
#   user  system elapsed 
#  41.56    0.03   41.59 
system.time(ans2<-DT[J(this_s,this_exp,this_init),4,with=FALSE])
#   user  system elapsed 
#    0       0       0 
identical(ans1,ans2)
# [1] TRUE
Run Code Online (Sandbox Code Playgroud)

难道我做错了什么?我已经阅读了data.table常见问题解答等.任何帮助将不胜感激.

非常感谢.

r data.table

5
推荐指数
1
解决办法
593
查看次数

标签 统计

data.table ×1

r ×1