data.table 1.8.1.: «DT1 = DT2» — это не то же самое, что DT1 = копировать (DT2)?

Я заметил некоторое непоследовательное (непоследовательное для меня) поведение в 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

ожидается ли такое поведение?

6
задан Florian Oswald 25 June 2012 в 15:34
поделиться