data.table中修改dt1后dt同步变更,为何两表存在关联?
关于data.table中dt和dt1关联的问题解答
这是因为你用dt1 <- dt赋值时,并没有创建一个新的data.table对象,只是给原对象dt多起了一个引用别名。
data.table的:=操作符是原地修改数据的——它直接在原对象的内存空间里做改动,不会生成新副本。所以不管你用dt还是dt1来操作,本质上都是在修改同一个底层数据对象,自然两个变量都会出现新增的Calc列。
解决办法
要创建完全独立的副本,必须使用data.table的copy()函数:
library(data.table) dt <- data.table(Var1 = c(1,2,3), Var2 = c(4,5,6)) dt1 <- copy(dt) # 用copy生成独立副本 dt1[, Calc := Var1 + Var2]
这样修改dt1时,dt就不会受到任何影响了。
补充说明
这种引用传递是data.table特意设计的特性——避免不必要的内存复制,提升大数据处理的性能。但如果不注意,就会出现你遇到的“一个变量修改影响另一个”的情况,记住用copy()来生成独立副本即可。
内容的提问来源于stack exchange,提问作者billybob196
相关产品推荐
相关产品推荐

