【问题标题】:R Data table copy and modification alters original one [duplicate]R数据表复制和修改改变了原来的[重复]
【发布时间】:2023-04-10 09:37:01
【问题描述】:

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

更明确地创建新的data.table时我没有问题:dtt = data.table(dt)

【问题讨论】:

标签: r copy data.table


【解决方案1】:

当您将新变量分配给已经存在的变量时,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

【讨论】:

  • 我的问题出在 R 数据表上(对不起,我首先忘了提及)。我猜它实现了与您指出的相同的数据结构。您明确复制表 cf 是正确的。我的编辑。
  • @Arun 任何帮助都是好的 :)
猜你喜欢
  • 2021-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-27
  • 2018-09-20
  • 2019-01-09
相关资源
最近更新 更多