Verstehen, wann eine data.table ein Verweis auf eine andere data.table ist
Ich habe ein wenig Probleme beim Verstehen der Eigenschaften der Referenzübergabe vondata.table
. Einige Operationen scheinen die Referenz zu "brechen", und ich möchte genau verstehen, was passiert.
Beim Erstellen einesdata.table
von einem anderendata.table
(über<-
und aktualisieren Sie dann die neue Tabelle mit:=
wird auch die Originaltabelle geändert. Dies wird erwartet nach:
?data.table::copy
undstackoverflow: pass-by-reference-the-operator-in-the-data-table-package
Hier ist ein Beispiel:
<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>
Wenn ich jedoch ein nicht:=
Modifikation zwischen dem<-
Zuordnung und die:=
linien oben,DT
wird jetzt nicht mehr geändert:
<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>
So scheint es, dass dienewDT$b[2] <- 200
Zeile bricht irgendwie die Referenz. Ich würde vermuten, dass dies irgendwie eine Kopie aufruft, aber ich würde gerne verstehen, wie R diese Operationen behandelt, um sicherzustellen, dass ich keine potenziellen Fehler in meinen Code einbringe.
Ich würde mich sehr freuen, wenn mir jemand dies erklären könnte.