R Data table copy and modification alters original one [duplicate]

天大地大妈咪最大 提交于 2019-12-29 08:39:06

问题


When I copy a data.table and modify the new one the orginal one gets altered and I cannot figure out one. Is this a normal behaviour?

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

I have no problem when creating the new data.table more explicitely: dtt = data.table(dt)


回答1:


When you assign a new variable to an already existing variable, R doesn't create a copy, but just points to the new variable, which is very nice as you don't want to make copies unless you absolutely need to - copy on modify.

After this, since you use the:= operator, which modifies in-place (by reference), and since at the moment, both objects are pointing to the same location, it gets reflected on both the objects.

The fix is to explicitly copy the data.table using copy() function and then assign by reference as follows:

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



来源:https://stackoverflow.com/questions/22956098/r-data-table-copy-and-modification-alters-original-one

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!