2つに分割したいdata.tableがあります。私はこれを次のように行います:
dt <- data.table(a=c(1,2,3,3),b=c(1,1,2,2))
sdt <- split(dt,dt$b==2)
しかし、次のステップとしてこのようなことをしたい場合
sdt[[1]][,c:=.N,by=a]
次の警告メッセージが表示されます。
警告メッセージ:In
[.data.table
(sdt [[1]]:=
、、(c、.N)、by = a):無効な.internal.selfrefが検出され、テーブル全体のコピーを取得して修正されたため、:=でこの新しいメッセージを追加できます参照による列。以前の時点で、このdata.tableはRによってコピーされています。現在(そして奇妙なことに)Rでdata.table全体をコピーする可能性のあるkey <-、names <-、attr<-は避けてください。コピーを避けるために、代わりにset *構文を使用してください:setkey()、setnames()およびsetattr()。また、list(DT1、DT2)はDT1とDT2全体をコピーします(Rのlist()は名前付きオブジェクトをコピーします)。必要に応じて(実装するために)代わりにreflist()を使用します。このメッセージが役に立たない場合は、datatable-helpに報告して、根本的な原因を修正できるようにしてください。
より効率的になるように(そしてこのメッセージを受け取らないように)テーブルを分割するより良い方法があるかどうか疑問に思っていますか?