将 data.table 列分配给 R 中的变量

Assign a data.table column to a variable in R

我对 R 中 data.table 列的分配有疑问。我的示例代码如下所示:

library(data.table)
DT <- data.table(A=c(3,5,2,6,4), B=c(6,2,7,2,1), Amount=1:5)
setkey(DT, A)
amt <- DT$Amount 
amt #3 1 5 2 4
setkey(DT, B)
amt #5 2 4 1 3

我使用“$”符号将 data.table 的列分配给变量 "amt",但在我更改 data.table 的顺序后看起来像"amt" 也发生了变化。谁能告诉我为什么会这样?以及如何避免这种情况发生(我不希望在更改 DT 的顺序时更改 "amt" 的顺序)?

非常感谢。

要解决这个问题,您可以复制专栏:

amt <- copy(DT$Amount)

分配 amt <- DT$Amount 时,结果是 "shallow copy,",它只是指向原始列的指针。当您想要 to create a copy of a data.table 时会出现同样的问题,最佳做法是 DT2 <- copy(DT)

请注意 data.tables - 与 data.frames 一样,它们是一个特例 - 每个都是指向列的指针的向量;并且这种复制行为是从基础 R 继承的。例如:

DF <- data.frame(x=c(1,4,2)); xx <- DF$x; setorder(DF,x); identical(xx,DF$x) # TRUE

The link above 强烈推荐技术细节和最佳实践建议。