这个(非常基本的)问题是交换的结果here .
setkey()
的文档说明:
setkey()对data.table进行排序并将其标记为已排序 . 排序列是关键 . 密钥可以是任何顺序的任何列 . 列始终按升序排序 . 该表由参考更改...(强调添加)
我总是将其解释为 setkey()
创建索引,而不是物理地重新排列数据表的行(类似于索引数据库表) . 但如果这是真的,那么删除密钥(使用 setkey(DT,NULL)
)应删除索引并将数据表恢复为原始的未排序顺序 . 这不是发生的事情:
library(data.table)
DT <- data.table(a=3:1, b=1:3, c=5:7); DT
a b c
1: 3 1 5
2: 2 2 6
3: 1 3 7
setkey(DT,a); DT
a b c
1: 1 3 7
2: 2 2 6
3: 3 1 5
setkey(DT,NULL)
a b c
1: 1 3 7
2: 2 2 6
3: 3 1 5
所以有两个问题:
1:如果行重新排列(排序),那么“按引用更改”的含义是什么意思?
2: setkey(DT,NULL)
究竟做了什么?
1 回答
行已排序 . “通过引用更改”这里表示没有复制整个表,只是交换了行 .
setkey(DT, NULL)
相当于setattr(DT, "sorted", NULL)
. 它只是取消设置"sorted"属性 .