:=(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.