Понимание того, когда 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 обрабатывает эти операции, чтобы не допустить потенциальных ошибок в моем коде.
Я был бы очень признателен, если бы кто-то мог мне это объяснить.