web-dev-qa-db-fra.com

Supprimer plusieurs colonnes de data.table

Quelle est la bonne façon de supprimer plusieurs colonnes d'une table de données? J'utilise actuellement le code ci-dessous, mais obtenais un comportement inattendu lorsque j'ai répété accidentellement l'un des noms de colonne. Je ne savais pas si c'était un bug, ou si je ne devrais pas supprimer les colonnes de cette façon.

library(data.table)
DT <- data.table(x = letters, y = letters, z = letters)
DT[ ,c("x","y") := NULL]
names(DT)
[1] "z"

Ce qui précède fonctionne bien, mais

DT <- data.table(x = letters, y = letters, z = letters)
DT[ ,c("x","x") := NULL]
names(DT)
[1] "z"
68
matt_k

Cela ressemble à un bug solide et reproductible. Il a été classé comme bogue n ° 2791 .

Il semble que la répétition de la colonne tente de supprimer les colonnes suivantes.
S'il ne reste aucune colonne, alors R se bloque.


[~ # ~] mise à jour [~ # ~] : désormais corrigé dans la v1.8.11. De ACTUALITÉS :

L'affectation à la même colonne deux fois dans la même requête est désormais une erreur plutôt qu'un plantage dans certaines circonstances; par exemple, DT [ c ("B", "B"): = NULL] (supprimer par référence deux fois la même colonne). Merci à Ricardo ( # 2751 ) et matt_k ( # 2791 ) pour les rapports. Tests ajoutés.

35
Ricardo Saporta

Ce Q a été répondu mais considérez ceci comme une note annexe.

Je préfère la syntaxe suivante pour supprimer plusieurs colonnes

DT[ ,`:=`(x = NULL, y = NULL)]

car il correspond à celui pour ajouter plusieurs colonnes (variables)

DT[ ,`:=`(x = letters, y = "Male")]

Cela vérifie également les noms de colonne dupliqués. Donc, essayer de supprimer x deux fois générera un message d'erreur.

14
Pankil Shah