这个(非常基本的)问题是交换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)到底做什么?

最佳答案

行已排序。 “通过引用更改”在这里表示没有整个表的复制,只是交换了行。
setkey(DT, NULL)等效于setattr(DT, "sorted", NULL)。它只是取消设置“已排序”属性。

10-06 06:44