我想创建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)
答案 0 :(得分:8)
因为R实现了简单的引用计数,并且通常只复制修改而不是赋值。因此,{em>任何 y = x
和x
的{{1}}都不会复制任何内容,也不会创建新对象。
结合一些y
函数可以修改对象而不复制的事实,比如data.table
,你会得到你所看到的效果。
使用Frank提到的setnames
来强制显式复制。