Data.tableから複数の列を削除する正しい方法は何ですか?現在、以下のコードを使用していますが、誤って列名の1つを繰り返したときに予期しない動作が発生していました。これがバグなのか、この方法で列を削除すべきではないのかはわかりませんでした。
library(data.table)
DT <- data.table(x = letters, y = letters, z = letters)
DT[ ,c("x","y") := NULL]
names(DT)
[1] "z"
上記は正常に動作しますが、
DT <- data.table(x = letters, y = letters, z = letters)
DT[ ,c("x","x") := NULL]
names(DT)
[1] "z"
これは、堅実で再現可能なバグのように見えます。 Bug#2791 としてファイルされています。
列を繰り返すと、後続の列を削除しようとするようです。
列が残っていない場合、Rはクラッシュします。
[〜#〜] update [〜#〜]:v1.8.11で修正されました。 [〜#〜] news [〜#〜] から:
同じクエリで同じ列に2回割り当てると、状況によってはクラッシュではなくエラーになります。例:DT [、c( "B"、 "B"):= NULL](同じ列を2回参照して削除)。報告してくれたRicardo( #2751 )とmatt_k( #2791 )に感謝します。テストが追加されました。
このQは回答されましたが、これを補足説明と見なします。
複数の列を削除するには、次の構文を使用します
DT[ ,`:=`(x = NULL, y = NULL)]
複数の列(変数)を追加するものと一致するため
DT[ ,`:=`(x = letters, y = "Male")]
これは、重複した列名もチェックします。したがって、x
を2回ドロップしようとすると、エラーメッセージがスローされます。