gpt4 book ai didi

r - 为什么在更新键列时删除键?

转载 作者:行者123 更新时间:2023-12-01 12:44:50 27 4
gpt4 key购买 nike

我刚刚注意到包装中有一个小问题。请参阅下面的代码片段进行重现。


DT = data.table(a=1:3, b=1:6);
setkey(DT,b);

# As expected - data is "keyed" on b
> key(DT)
[1] "b"

# Now if i change content of column b, the key on the table "drops out"
DT [,b := seq(1,6)];

> key(DT)
NULL

仅供引用,我使用的是 R 版本 3.0.1 (2013-05-16)平台 (x86_64-w64-mingw32)data.table 版本 1.8 .11

在我看来,无论何时更新键列 - data.table 代码都会完全删除键,因为数据的内容(以及数据的顺序)发生了变化。我原以为代码会存储 key 、更改 b 列的内容、重新排序 b 列并将 b 列恢复为 key 。简而言之,保持 key 不变。

这类似于您在 RDBMS 数据库 中预期的行为。即使数据内容发生变化, key 也不会丢失。

有什么想法吗?

最佳答案

我认为需要更改键值有点奇怪。在使用 fread 或使用 RODBC 从数据库加载的数据旁边添加和更新新列是很常见的,但很少有人想更改键列中的值,不是吗? ?键列通常是数据集的基础,不会更改。

data.table 对此的处理方式默认是最快的。它按照您的要求更改键列中的值,然后删除键,因为它不确定键是否仍然有效。如果您真的希望它重建 key ,这可能会导致整个表的重新排序,那么只需再次显式调用 setkey 即可。这样,代码中额外的 setkey 会让代码的读者清楚地知道,对该键列的更新可能代价高昂。

data.table 中的一个键仅仅是排序顺序。它更类似于 SQL 中的聚集索引,其中磁盘上的行实际上按该顺序存储。

关于r - 为什么在更新键列时删除键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21177626/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com