У меня возникли проблемы с пониманием свойств pass-by-reference data.table. Некоторые операции, похоже, "ломают" ссылку, и я хотел бы точно понять, что происходит.
При создании data.table из другого data.table (через <-, а затем обновив новую таблицу на :=, также изменится исходная таблица. Ожидается, что:
 ?data.table::copy
и qaru.site/info/43347/...
Вот пример:
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
Однако, если я вставляю модификацию на основе не := между назначением <- и строками := выше, DT теперь больше не изменяется:
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
Итак, кажется, что строка newDT$b[2] <- 200 как-то "ломает" ссылку. Я бы предположил, что это каким-то образом вызывает копию, но я хотел бы полностью понять, как R обрабатывает эти операции, чтобы я не вводил потенциальные ошибки в свой код.
Я был бы очень признателен, если бы кто-нибудь мог мне это объяснить.
