Понимание того, когда data.table является ссылкой на (против копии) другого data.table

У меня небольшие проблемы с пониманием свойств передачи по ссылкеdata.table, Кажется, что некоторые операции «ломают» ссылка, и я хотел бы точно понять, что происходит.

На созданиеdata.table От другогоdata.table (с помощью<-затем обновите новую таблицу:=Исходная таблица также изменена. Это ожидается согласно:

?data.table::copy а такжеstackoverflow: передача по ссылке-оператору-в-таблице-данных-пакета

Вот пример:

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

Однако, если я вставлю не:= на основе модификации между<- назначение и:= строки выше,DT больше не изменяется:

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

Так что кажется, чтоnewDT$b[2] <- 200 линия как-то «ломается» ссылка. Я полагаю, что это как-то вызывает копию, но я хотел бы полностью понять, как R обрабатывает эти операции, чтобы не допустить потенциальных ошибок в моем коде.

Я был бы очень признателен, если бы кто-то мог мне это объяснить.

Ответы на вопрос(2)

Ваш ответ на вопрос