Я заметил некоторое непоследовательное (непоследовательное для меня) поведение в data.table при использовании разных операторов присваивания. Я должен признать, что никогда не понимал разницы между "=" и copy(), так что, возможно, мы можем пролить здесь немного света. Если вы используете "=" или "<-" вместо copy() ниже, при изменении скопированной таблицы данных исходная таблица данных также изменится.
Пожалуйста, выполните следующие команды, и вы поймете, что я имею в виду
library(data.table)
example(data.table)
DT
x y v
1: a 1 42
2: a 3 42
3: a 6 42
4: b 1 4
5: b 3 5
6: b 6 6
7: c 1 7
8: c 3 8
9: c 6 9
DT2 = DT
теперь я изменю столбец v в DT2:
DT2[ ,v:=3L]
x y v
1: a 1 3
2: a 3 3
3: a 6 3
4: b 1 3
5: b 3 3
6: b 6 3
7: c 1 3
8: c 3 3
9: c 6 3
но посмотрите, что случилось с DT:
DT
x y v
1: a 1 3
2: a 3 3
3: a 6 3
4: b 1 3
5: b 3 3
6: b 6 3
7: c 1 3
8: c 3 3
9: c 6 3
он также изменился. Итак: изменение DT2 изменило исходное DT. не так, если я использую copy():
example(data.table) # reset DT
DT3 <- copy(DT)
DT3[, v:= 3L]
x y v
1: a 1 3
2: a 3 3
3: a 6 3
4: b 1 3
5: b 3 3
6: b 6 3
7: c 1 3
8: c 3 3
9: c 6 3
DT
x y v
1: a 1 42
2: a 3 42
3: a 6 42
4: b 1 4
5: b 3 5
6: b 6 6
7: c 1 7
8: c 3 8
9: c 6 9
ожидается ли такое поведение?