通过引用更新数据表更改其他数据表

时间:2018-08-08 21:49:08

标签: r data.table

我有点难以理解为什么数据表会更新另一个数据表的列。

请考虑以下可重复的代码。

library(data.table)
dt <- data.table(a=rep(letters[1:4], 5), 
             b=rep(letters[5:8], 5),
             c=rep(letters[3:6], 5),
             x=sample(1:100, 20),
             y=sample(1:100, 20),
             z=sample(1:100, 20))

假设我将dt分配给dt.1:

dt.1 <- dt

接下来,假设我通过引用dt.1中的一列进行更新:

dt.1[, x:= x^2]

x列确实是平方的,但dt中的x列也是也平方的,即

dt[,x :=x^2]在后​​台执行。

为什么会发生这种情况,如何防止这种类型的更新/依赖发生?

谢谢

1 个答案:

答案 0 :(得分:1)

由于data.tables reference semantics在做

dt.1 <- dt

表示dt.1dt引用内存中的同一对象。修改一个修改另一个。换句话说,dt.1dt.

的浅表副本(指针的副本)

您可以通过执行深度复制

dt.1 <- copy(dt)

这将在内存中创建dt的第二个副本。对dt.1的任何修改都不会影响原始副本dt