R data.table键和辅助索引的兼容性

时间:2018-08-06 12:30:48

标签: r data.table

我正在尝试在某些数据表上同时使用键和二级索引。
在文档和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"

我需要帮助来了解我的理解或代码是否错误,或者键和辅助索引实际上是否不兼容。

1 个答案:

答案 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是多余的。