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.