使用 data.table 作为查找时,速度非常快。有一种行为不适用于我当前的工作流程,我确信这是一种更好的方式而且我错过了它。即使密钥是从父data.frame
获取的,行为也是在原地修改的行为, data.table 将以不一定总是如此的方式对父data.frame
采取行动。合乎需要的。
这是一个例子,因为我缺乏正确表达它的语言:
library(data.table)
set.seed(123)
N <- 100
key <- data.frame(x = sample.int(N, N), y = 1:N, z = 1:N)
key$w <- key$x
head(key)
## x y z w
## 1 29 1 1 29
## 2 79 2 2 79
## 3 41 3 3 41
## 4 86 4 4 86
## 5 91 5 5 91
## 6 5 6 6 5
set.seed(1)
terms <- data.frame(z = sample.int(2 * N, 1e2, replace = TRUE))
subkey <- key[c("x", "y")]
setDT(subkey)
setDT(terms)
setkey(subkey, x)
subkey[terms][[2]]
head(key)
## x y z w
## 1 1 74 1 1
## 2 2 35 2 2
## 3 3 51 3 3
## 4 4 18 4 4
## 5 5 6 5 5
## 6 6 54 6 6
请注意,key
的顺序会因使用data.table
而受到影响,即使它未在查找中使用过吗?
我知道data.table
正在避免制作副本,但有办法将此链接切换为key
并强制data.table
在subkey
上操作而不修改key
}?
答案 0 :(得分:3)
而不是
subkey <- key[c("x", "y")]
setDT(subkey)
只是做
subkey <- as.data.table(key[c("x", "y")])
这将强制复制并切断连接