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

时间:2015-09-25 13:19:04

标签: 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)

1 个答案:

答案 0 :(得分:8)

因为R实现了简单的引用计数,并且通常只复制修改而不是赋值。因此,{em>任何 y = xx的{​​{1}}都不会复制任何内容,也不会创建新对象。

结合一些y函数可以修改对象而不复制的事实,比如data.table,你会得到你所看到的效果。

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