Entender exatamente quando um data.table é uma referência a (versus uma cópia de) outro data.table

Eu estou tendo um pouco de dificuldade em entender as propriedades de passagem por referência dedata.table. Algumas operações parecem "quebrar" a referência e eu gostaria de entender exatamente o que está acontecendo.

Ao criar umdata.table de outrodata.table (através da<-, atualizando a nova tabela:=, a tabela original também é alterada. Isso é esperado, conforme:

?data.table::copy estackoverflow: pass-by-reference-the-operator-in-the-data-table-package

Aqui está um exemplo:

<code>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
</code>

No entanto, se eu inserir um:= modificação baseada entre o<- atribuição e o:= linhas acima,DT agora não está mais modificado:

<code>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
</code>

Então parece que onewDT$b[2] <- 200 linha de alguma forma "quebra" a referência. Eu acho que isso invoca uma cópia de alguma forma, mas eu gostaria de entender completamente como R está tratando essas operações, para garantir que eu não introduza erros potenciais no meu código.

Eu apreciaria muito se alguém pudesse explicar isso para mim.

questionAnswers(2)

yourAnswerToTheQuestion