在测试我的代码时,我发现了以下内容:如果我分配了一个 data.table DT1
至 DT
并更改 DT
之后,DT1
随之改变。所以DT
和 DT1
好像有内在联系。这是预期的行为吗?虽然我不是编程专家,但这对我来说似乎是错误的,并使用简单的 R 变量或 data.frame
对其进行测试。 ,我无法重现该行为。这里发生了什么事?
DF <- data.frame(ID=letters[1:5],
value=1:5)
DF1 <- DF
all.equal(DF1, DF)
[1] TRUE
DF[1, "value"] <- DF[1, "value"]*2
all.equal(DF1, DF)
[1] "Component 2: Mean relative difference: 1"
library(data.table)
data.table 1.7.1 For help type: help("data.table")
DT <- data.table(ID=letters[1:5],
value=1:5)
DT1 <- DT
all.equal(DT1, DT)
[1] TRUE
DT[, value:=value*2]
ID value
[1,] a 2
[2,] b 4
[3,] c 6
[4,] d 8
[5,] e 10
all.equal(DT1, DT)
[1] TRUE
最佳答案
这篇文档在data.table
有助于。 ? data.table::copy
No value is returned. The data.table is modified by reference. If you require a copy, take a copy first (using DT2=copy(DT)). copy() may also sometimes be useful before := is used to subassign to a column by reference.
关于r - := (pass by reference) operator in the data. 表包同时修改另一个数据表对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8030452/