当我复制data.table并修改新的一个时,原始的一个会被改变,我找不到一个。这是正常行为吗?
dt = data.table(zone=1:5, pc=11:15)
dtt = dt
dtt[, pc := pc*2 ]
dtt
zone pc
1: 1 22
2: 2 24
3: 3 26
4: 4 28
5: 5 30
dt
zone pc
1: 1 22
2: 2 24
3: 3 26
4: 4 28
5: 5 30
创建新数据时没有问题。显示更明确:dtt = data.table(dt)
答案 0 :(得分:3)
当你为一个已经存在的变量分配一个新变量时,R不会创建一个副本,而只是指向新变量,这是非常好的,因为你不想制作副本,除非你绝对需要 - 复制修改。
在此之后,由于您使用:=
运算符,该运算符修改就地(通过引用),并且此时两个对象都指向同一位置,反映在两个对象上。
修复方法是使用data.table
函数明确复制 copy()
,然后通过引用分配如下:
dtt = copy(dt) ## dt and dtt are not pointing to same locations anymore
dtt[, pc := pc*2] ## assignment by reference doesn't affect dt
HTH