data.table(DT)を作り、DT1にそれを代入する。 通常のRだとDTと同じ構造のDT1ができるというイメージ。
library(data.table)
DT <- data.table(ID=letters[1:5], value=1:5)
DT1 <- DT
all.equal(DT1, DT)
## [1] TRUE
DTの一部の列(value)を変更してみる。
DT[, value:=value*2]
## ID value
## 1: a 2
## 2: b 4
## 3: c 6
## 4: d 8
## 5: e 10
これでDTとDT1は違うものになっていると思いきやそうではない。
all.equal(DT1, DT)
## [1] TRUE
確認するとDT1も変更されている。
DT1
## ID value
## 1: a 2
## 2: b 4
## 3: c 6
## 4: d 8
## 5: e 10
R以外の他の言語では当たり前の参照渡しというだけなのだがRしか知らないと混乱すると思う。参照渡しについては例えば以下参照。
http://magazine.rubyist.net/?0032-CallByValueAndCallByReference
なお、Pythonのpandasも参照渡しだったりするので注意。以下参考まで。
http://nbviewer.ipython.org/gist/piroyoung/d3f078ed8c751246e03a