異なる代入演算子を使用すると、data.table に一貫性のない (私にとっては一貫性のない) 動作があることに気付きました。「=」と copy() の違いがまったくわからなかったことを認めなければならないので、ここでいくつかの光を当てることができるかもしれません。以下の copy() の代わりに "=" または "<-" を使用すると、コピーした data.table を変更すると、元の data.table も変更されます。
次のコマンドを実行してください。意味がわかります。
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
ここで、DT2 の v 列を変更します。
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
この動作は想定されていますか?