我在理解data.table
的按引用传递属性时遇到了一些问题。有些操作似乎“破坏”了引用,我想确切地了解到底发生了什么。
在从另一个data.table
创建data.table
时(通过<-
,然后通过:=
更新新表),原始表也会被更改。这是预期的,根据以下内容:
?data.table::copy
和stackoverflow: pass-by-reference-the-operator-in-the-data-table-package
下面是一个例子:
library(data.table)
DT <- data.table(a=c(1,2), b=c(11,12))
print(DT)
# a b
# [1,] 1 11
# [2,] 2 12
newDT <- DT # reference, not copy
newDT[1, a := 100] # modify new DT
print(DT) # DT is modified too.
# a b
# [1,] 100 11
# [2,] 2 12
但是,如果我在上面的<-
赋值和:=
行之间插入一个非基于:=
的修改,DT
现在不再被修改:
DT = data.table(a=c(1,2), b=c(11,12))
newDT <- DT
newDT$b[2] <- 200 # new operation
newDT[1, a := 100]
print(DT)
# a b
# [1,] 1 11
# [2,] 2 12
因此,newDT$b[2] <- 200
行似乎以某种方式“破坏了”引用。我猜这以某种方式调用了一个副本,但我希望完全了解R是如何处理这些操作的,以确保我不会在我的代码中引入潜在的bug。
如果有人能给我解释一下,我将不胜感激。
https://stackoverflow.com/questions/10225098
复制相似问题