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"
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.
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.