为什么R data.table要向我没有引用的另一个数据表添加列?

为什么R data.table要向我没有引用的另一个数据表添加列?,r,data.table,R,Data.table,我有一个原始数据表dt1,其中包含列x。我想创建另一个名为dt2的数据表,其中包含x和x的第一个延迟。当我执行以下代码时,我根据需要获得dt2,但我发现dt1也变成了dt2——我不希望发生这种情况 library(data.table); x <- rnorm(100, 0, 1); dt1 <- data.table(x); dt2 <- dt1; dt2[, lx:= shift(x, 1, type= "lag")]; identical(dt1, dt2); #

我有一个原始数据表
dt1
,其中包含列
x
。我想创建另一个名为
dt2
的数据表,其中包含
x
x
的第一个延迟。当我执行以下代码时,我根据需要获得
dt2
,但我发现
dt1
也变成了
dt2
——我不希望发生这种情况

library(data.table);

x <- rnorm(100, 0, 1);
dt1 <- data.table(x);

dt2 <- dt1;
dt2[, lx:= shift(x, 1, type= "lag")];

identical(dt1, dt2); # evaluates to TRUE
库(data.table);

是,
数据。表
通过引用更改其值。如果要保留原件的副本,应使用
copy

library(data.table)         
DT1 <- data.table(x = 1:100)
DT2 <- DT1                  
identical(DT1, DT2)         
#> [1] TRUE
DT1[, y := x + 1]           
identical(DT1, DT2)         
#> [1] TRUE
DT2 <- copy(DT1)            
DT2[, y := x + 2]           
identical(DT1, DT2)         
#> [1] FALSE
库(data.table)
DT1[1]正确
DT2[1]错误

我花了好几个小时对此感到困惑和愤怒——谢谢@Hugh!