优化data.table中的矢量扫描

时间:2019-12-03 23:06:28

标签: r data.table

我有一个问题,我需要将2列分成几百万次。因此,我希望优化子设置的时间。

我看到即使矢量扫描是按照data.table小插图https://cran.r-project.org/web/packages/data.table/vignettes/datatable-keys-fast-subset.html进行矢量扫描

  

已自动优化以使用二进制搜索

按照键控子集的意图进行显式写入仍然更快。

library(data.table)

flights <- fread("flights14.txt") # From the "Introduction to data.table Vignette"

setkey(flights, origin, dest)




system.time({for(i in 1:5000) flights[.("JFK", "MIA")]})

system.time({for(i in 1:5000) flights[origin == "JFK" & dest == "MIA"]})

system.time({for(i in 1:5000) flights[origin %chin% "JFK" & dest %chin% "MIA"]})
  user  system elapsed 
268.689   5.203   8.767 

  user  system elapsed 
200.481   6.370   6.489

   user  system elapsed 
261.194   3.981   8.518 

我的想法是重写以下代码,以便对其进行优化(我的搜索向量中的元素数量是可变的)。

flights[origin %chin% c("JFK", "EWR") & dest %chin% c("MIA", "ALB",)]

一种尝试尽可能多地使用第一个键的方法比较慢:

rbind(flights[.(c("JFK", "EWR"), "ALB"), nomatch = NULL], flights[.(c("JFK", "EWR"), "MIA"), nomatch = NULL])

有没有一种方法可以更快地完成此子集?

0 个答案:

没有答案