我在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时,结果是“浅表副本”,它只是指向原始列的指针。当您需要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以获得技术细节和最佳实践的建议。

关于r - 将data.table列分配给R中的变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32365650/

10-09 20:25
查看更多