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.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage