为什么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!