Supprimer plusieurs colonnes de data.table

Quelle est la bonne façon de supprimer plusieurs colonnes d’un data.table? J’utilise actuellement le code ci-dessous, mais j’ai eu un comportement inattendu lorsque j’ai accidentellement répété l’un des noms de colonne. Je n’étais pas sûr si c’était un bug ou si je ne devais 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" 

Le ci-dessus 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é sous le numéro de bug 2791 .

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


UPDATE : Maintenant corrigé dans la v1.8.11. De NEWS :

L’affectation à la même colonne deux fois dans la même requête est maintenant une erreur plutôt qu’un blocage dans certaines circonstances; par exemple, DT [, c (“B”, “B”): = NULL] (supprimer par référence la même colonne deux fois). Merci à Ricardo ( # 2751 ) et à matt_k ( # 2791 ) pour leurs reportages. Tests ajoutés

On a répondu à cette question mais considère cela comme une note secondaire.

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

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

car il correspond à celui d’append plusieurs colonnes (variables)

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

Ceci vérifie également les noms de colonne dupliqués. Donc, essayer de déposer x deux fois va lancer un message d’erreur.