data.table - setkey(...)是否创建索引或对数据表中的行进行物理重新排序?

jlh*_*ard 17 r data.table

这个(非常基本的)问题是这里交换的结果.

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
Run Code Online (Sandbox Code Playgroud)

所以有两个问题:

1:如果行重新排列(排序),那么"按引用更改"的含义是什么意思?

2:究竟setkey(DT,NULL)做了什么?

edd*_*ddi 12

  1. 行已排序."通过引用更改"这里表示没有复制整个表,只是交换了行.

  2. setkey(DT, NULL)相当于setattr(DT, "sorted", NULL).它只是取消设置"已排序"属性.

  • 另外,请注意`dput(DT)`除了在第二个例子中获得`sorted`属性外,实际上已经改变了. (2认同)