data.table
私の古いコードがなぜ機能しないのですか?
サーチ…
前書き
data.tableパッケージは、時間の経過と共に多くの変更と革新を受けました。従来のコードを見たり、古いブログ投稿を見直したりするのに役立ついくつかの落とし穴があります。
ユニークで重複したデータはキー付きデータでは機能しなくなりました。
これは、data.table> = 1.9.8に移動する人向けです
あなたはペットの所有者と名前のデータセットを持っていますが、いくつかの繰り返しデータがキャプチャされていると思われます。
library(data.table)
DT <- data.table(pet = c("dog","dog","cat","dog"),
owner = c("Alice","Bob","Charlie","Alice"),
entry.date = c("31/12/2015","31/12/2015","14/2/2016","14/2/2016"),
key = "owner")
> tables()
NAME NROW NCOL MB COLS KEY
[1,] DT 4 3 1 pet,owner,entry.date owner
Total: 1MB
表をキー入力して呼び出すと、それをソートします。アリスは二度入力されました。
> DT
pet owner entry.date
1: dog Alice 31/12/2015
2: dog Alice 14/2/2016
3: dog Bob 31/12/2015
4: cat Charlie 14/2/2016
unique
を使用して、キーに基づいてデータの重複を取り除いて、最新のデータ取り込み日を使用してLASTからTRUEに設定するとします。
1.9.8
clean.DT <- unique(DT, fromLast = TRUE)
> tables()
NAME NROW NCOL MB COLS KEY
[1,] clean.DT 3 3 1 pet,owner,entry.date owner
[2,] DT 4 3 1 pet,owner,entry.date owner
Total: 2MB
アリスの複製が削除されました。
1.9.8
clean.DT <- unique(DT, fromLast = TRUE)
> tables()
NAME NROW NCOL MB COLS KEY
[1,] clean.DT 4 3 1 pet,owner,entry.date owner
[2,] DT 4 3 1 pet,owner,entry.date owner
これは動作しません。まだ4行!
修正
by=
パラメータを使用します。 これはキーではなく、デフォルトですべての列になります。
clean.DT <- unique(DT, by = key(DT), fromLast = TRUE)
今はすべてが順調です。
> clean.DT
pet owner entry.date
1: dog Alice 14/2/2016
2: dog Bob 31/12/2015
3: cat Charlie 14/2/2016
詳細と一時停止の修正
詳細については、NEWSリリースノートの項目1を参照してください。
v1.9.8の変更点(CRAN版、2016年11月25日)
潜在的に変化する変化
- デフォルトでは、すべての列は
unique()
、duplicated()
およびuniqueN()
data.tableメソッド、#1284および#1841によって使用されます。古い動作を復元するには:options(datatable.old.unique.by.key=TRUE)
。 1年間で、この古いオプションを元に戻すオプションは、警告とともに非推奨になります。 2年後にこのオプションは削除されます。明確にするためにby=key(DT)
を明示的に渡しby=key(DT)
ください。デフォルトに依存しているコードのみが影響を受けます。 data.tableを使用するCRANおよびBioconductorパッケージは、リリース前にチェックされていました。 9は変更が必要であり、通知されました。テストカバレッジのないコード行は、これらのチェックによって見逃されています。 CRANまたはBioconductor以外のパッケージはチェックされませんでした。
したがって、コードが修正されるまで一時的な回避策としてオプションを使用することができます。
options(datatable.old.unique.by.key=TRUE)
Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow