以下是我的代码:
require(data.table)
data("USArrests")
dt1 <- as.data.table(USArrests, keep.rownames = T)
dt1[, state:=rn]
setkey(dt1, state)
key(dt1)
# "state"
states1 <- c('Iowa','Ohio','Utah')
states2 <- c('Utah','Iowa','Ohio')
dt.subset1 <- dt1[states1]
dt.subset1 # 3 rows as expected
key(dt.subset1) # "state", as expected
# "state"
dt.subset2 <- dt1[states2]
dt.subset2 # 3 rows as expected
key(dt.subset2) # NULL - why?
# NULL
dt.subset2a <- dt1[sort(states2)]
dt.subset2a # 3 rows as expected
key(dt.subset2a)
# state
dt1[states1]
和dt1[states2]
都像预期的那样返回正确的子集,但只有第一个保留键列,而第二个重置键列.似乎只有在预排序值的情况下,密钥才是保守的--但这是预期的/有记录的行为吗?