为什么 setnames() 会影响复制的表?

Why does setnames() affect copied tables?

我想创建一个 data.table 的副本并更改新 table 中的列名称。当我更改 y$V1 的名称时,x$V1 的名称也会更改。为什么会这样,我该如何避免这种行为?

示例:

x <- data.table(c(1,2,3),c(1,2,3))
y <- x
setnames(y, 'V1', 'new_name')
names(y) == names(x)

因为 R 实现了简单的引用计数,通常只在 修改 时复制,而不是在赋值时复制。所以 y = x for any x and y 不会复制任何东西,也不会创建新对象。

结合某些 data.table 函数可以在不复制的情况下修改对象的事实,例如 setnames,您会得到您所看到的效果。

使用 Frank 提到的 copy 强制显式复制。