gpt4 book ai didi

r - data.table 选择键不等于值的行

转载 作者:行者123 更新时间:2023-12-01 03:05:12 25 4
gpt4 key购买 nike

考虑这个 data.table:

DT <- data.table(mtcars)
setkey(DT, am, gear)

如何选择 am == 1 & gear != 4 的行使用快速二进制索引?

例如我认为选择一行说 am == 1 & gear == 4使用快速二进制索引,我这样做:
DT[.c(1, 4)]

最佳答案

从头重写

https://cran.r-project.org/web/packages/data.table/vignettes/datatable-keys-fast-subset.html .栏目 4) 二分搜索 vs 向量扫描 指出,例如,以下

flights[origin == "JFK" & dest == "MIA"]

将得到,我引用,自动优化以使用二分搜索。

但是!,我冒昧地修改了他们包含的示例并将选择与否定进行了比较,正如您所尝试的那样,结果并不是那么好:/
N = 2e7L
DT = data.table(x = sample(letters, N, TRUE),
y = sample(1000L, N, TRUE),
z = sample(c(T, F), N, TRUE, probs=c(0.00001, 0.99999)),
val = runif(N))
key(DT) # should be null
t1 <- system.time(ans1 <- DT[z == T & x == "g"])
t2 <- system.time(ans1 <- DT[z != F & x == "g"])
setkey(DT, x, z)
t3 <- system.time(ans1 <- DT[z == T & x == "g"])
t4 <- system.time(ans1 <- DT[z != F & x == "g"])

在我的机器上,结果如下:
> t1
user system elapsed
0.464 0.001 0.124
> t2
user system elapsed
0.169 0.000 0.169
> t3
user system elapsed
0.002 0.000 0.002
> t4
user system elapsed
0.168 0.000 0.167

似乎如果选择中有否定,我们不仅不使用快速二进制搜索,而且我们也只使用一个核心(比较 t1 和 t2 - 用户和耗时)。在这种情况下,如果选择不使用否定并且设置了键,我们只会获得疯狂的二进制性能。这令人失望,甚至可能是一个错误?

关于r - data.table 选择键不等于值的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58503964/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com