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

321*_*21k 4 r data.table

我想创建data.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)
Run Code Online (Sandbox Code Playgroud)

edd*_*ddi 8

因为R实现了简单的引用计数,并且通常只复制修改而不是赋值.因此,y = x对于任何 x并且y不会复制任何内容,并且不会创建任何新对象.

结合一些data.table函数可以修改对象而不复制的事实,就像setnames你得到的效果一样.

使用copyFrank提到强制显式复制.