我正在尝试在某些数据表上同时使用键和二级索引。
在文档和indexes vignette中,我没有发现有关它们替代的任何警告,我只发现只能存在一个密钥,这不一定意味着不兼容。
这是我得到的行为:
require(data.table)
keys <- c("a","b","c")
d <- data.table(a = 1, b = 2, c = 3)
# set key ok
setkeyv(d,keys); print(key(d))
## [1] "a" "b" "c"
# indexes seem to fail when key is present
setindexv(d,keys); print(indices(d))
## NULL
# without key indexes work
d <- data.table(a = 1, b = 2, c = 3)
setindexv(d,keys); print(indices(d))
## [1] "a__b__c"
我需要帮助来了解我的理解或代码是否错误,或者键和辅助索引实际上是否不兼容。
答案 0 :(得分:1)
setindexv
重定向到setkeyv
,其步骤类似于...
else if (identical(head(key(x), length(cols)), cols)) { setattr(x, "sorted", cols) return(invisible(x)) }
这将导致代码在添加索引的步骤之前退出。我认为原因是,只要数据已被标记为a, b, c
排序,就拥有索引a, b, c, d, e
是多余的。