Comprender exactamente cuándo una tabla de datos es una referencia a (frente a una copia de) otra tabla de datos.

Me está costando entender las propiedades de paso por referencia dedata.table. Algunas operaciones parecen "romper" la referencia, y me gustaría entender exactamente qué está sucediendo.

Al crear undata.table de otrodata.table (vía<-, luego actualizando la nueva tabla por:=, la mesa original también se altera. Esto se espera, según:

?data.table::copy ystackoverflow: paso-por-referencia-el-operador-en-el-paquete-tabla-de-datos

Aquí hay un ejemplo:

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

Sin embargo, si inserto un:= modificación basada entre la<- asignación y la:= líneas arribaDT Ahora ya no se modifica:

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

Así que parece que lanewDT$b[2] <- 200 La línea de alguna manera 'rompe' la referencia. Supongo que esto invoca una copia de alguna manera, pero me gustaría entender completamente cómo R está tratando estas operaciones, para asegurarme de no introducir posibles errores en mi código.

Apreciaría mucho si alguien me pudiera explicar esto.

Respuestas a la pregunta(2)

Su respuesta a la pregunta