r pass-by-reference data.table

:=(pase por referencia) el operador en el paquete data.table modifica otro objeto de la tabla de datos simultáneamente



pass-by-reference (1)

Al probar mi código, descubrí lo siguiente: si asigno un data.table DT1 a DT y luego cambio DT , DT1 cambia con él. Así que DT y DT1 parecen estar vinculados internamente. ¿Es este el comportamiento previsto? Aunque no soy un experto en programación, esto me parece mal, y al probarlo con variables R simples o un data.frame , no pude reproducir el comportamiento. ¿Que esta pasando aqui?

DF <- data.frame(ID=letters[1:5], value=1:5) DF1 <- DF all.equal(DF1, DF) [1] TRUE DF[1, "value"] <- DF[1, "value"]*2 all.equal(DF1, DF) [1] "Component 2: Mean relative difference: 1" library(data.table) data.table 1.7.1 For help type: help("data.table") DT <- data.table(ID=letters[1:5], value=1:5) DT1 <- DT all.equal(DT1, DT) [1] TRUE DT[, value:=value*2] ID value [1,] a 2 [2,] b 4 [3,] c 6 [4,] d 8 [5,] e 10 all.equal(DT1, DT) [1] TRUE


Esta pieza de documentación en data.table ayudaría. ? data.table::copy

No se devuelve ningún valor. La tabla data se modifica por referencia. Si necesita una copia, primero tome una copia (utilizando DT2 = copia (DT)). copy () también puede ser útil a veces antes de: = se utiliza para subasignar a una columna por referencia.