R数据表复制和修改会改变原始数据

时间:2014-04-09 07:50:36

标签: r copy data.table

当我复制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)

1 个答案:

答案 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