adata.table
が新たにロードされた場合、 を含む関数は:=
参照によって変更されないようです。
誰でも再現できますか?バグですか?
test<-function(data){data[,ppp:=1]}
a<-data.table(x=1:2)
save(a,file="ttt")
load("ttt")
test(a) # show ppp
a # doesn't have ppp
b<-data.table(x=1:2)
test(b) # show ppp
b # has ppp
アップデート
列ポインターベクトルにスロットが残っていない場合、浅いコピーが実行されるのは、ちょっとした「機能」です。名前data.table
は新しいベクトルにバインドされます。同じスコープ全体で正常に機能します。ただし、戻り値を手動で名前にバインドしない限り、外側のスコープはこの変更を認識できません。
options(datatable.alloccol=4)
options(datatable.verbose=TRUE)
a<-as.data.table(matrix(1:20, ncol=4))
truelength(a) # 4
test<-function(x){print(truelength(x));x[,pp:=1];print(truelength(x));x}
test(a)
a # doesn't change