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])
有没有办法更快地完成这个子集?
解决方案
推荐阅读
- docker - 自定义 DB2 docker 镜像
- kubernetes - Kubernetes - 在安装 PV 的同一工作节点上安排 pod
- android - 如何在 Android 中从 ImageView 中创建一个 int
- lightstreamer - Lightstreamer 新手:我应该如何解释这个 Web 请求?
- django - 无法使用 django PasswordResetView 发送邮件?
- django - RelatedObjectDoesNotExist 在 /teacher/class_students_list
- node.js - 分页功能中的“意外标识符错误”
- python - Java Runtime Error python pip install package in big sur
- azure - Azure AppService 和内部 SOAP 服务之间的 SSL 连接问题
- bash - fdisk 命令在 bash 脚本中找不到磁盘