在 data.table 中结合向量和二进制搜索

Combining vector and binary search in data.table

有时,我有一个带键的 data.table,我想根据它的键 一个未带键的列进行子集化。 simplest/fastest 的方法是什么?

感觉最自然的是错误:

dt <- data.table(id = 1:100, var = rnorm(100), key = "id")
dt[.(seq(1, 100, 2)) & var > 0, ]

下一个最干净的事情是链接:

dt[.(seq(1, 100, 2))][var > 0, ]

当然我们完全可以放弃使用二进制搜索(我认为这显然是要避免的):

dt[id %in% seq(1, 100, 2) & var > 0, ]

有没有我缺少的方法?另外,第一个是错误的任何特定原因?语法对我来说似乎很清楚。

在撰写本文时,本机方法:

dt[.(seq(1, 100, 2)) & var > 0, j] #some expression j

如下:

dt[.(seq(1, 100, 2)), .SD[var > 0, j]]

我使用 data.table 的次数越多,这就越自然,但看起来还是有点不直观。 C'est la vie.