web-dev-qa-db-fra.com

Comment sélectionner des colonnes dans data.table en utilisant un vecteur de caractères de certains noms de colonnes?

J'essaie de sélectionner ces colonnes dans une table de données dont le nom apparaît dans mon vecteur de caractères. L'opération fonctionne dans un pur data.frame, mais ne fonctionne pas dans un data.table. Voici un exemple reproductible.

> names(mtcars)
 [1] "mpg"  "cyl"  "disp" "hp"   "drat" "wt"   "qsec" "vs"   "am"   "gear"
[11] "carb"
> myVector <- c('disp', 'hp', 'wt')
> head(mtcars[, myVector])
                  disp  hp    wt
Mazda RX4          160 110 2.620
Mazda RX4 Wag      160 110 2.875
Datsun 710         108  93 2.320
Hornet 4 Drive     258 110 3.215
Hornet Sportabout  360 175 3.440
Valiant            225 105 3.460

Je viens de créer un vecteur qui inclut disp, hp et wt et j'ai sélectionné les colonnes correspondantes dans mon data.frame en utilisant ce vecteur. Faisons maintenant un objet data.table à partir de mon data.frame et essayons de faire la même opération.

> library(data.table)
> mtcarsDT <- data.table(mtcars)
> mtcarsDT[, myVector]
[1] "disp" "hp"   "wt"  
28
bourbaki4481472

On peut utiliser with=FALSE pour effectuer la même opération que dans data.frame

mtcarsDT[, myVector, with=FALSE]

Selon ?data.table

avec: Par défaut, ‘with = TRUE’ et ‘j’ sont évalués dans le cadre de ‘x’; les noms de colonnes peuvent être utilisés comme variables. Lorsque ‘with = FALSE’ ‘j’ est un vecteur de caractères de noms de colonnes ou un vecteur numérique de positions de colonnes à sélectionner, et la valeur renvoyée est toujours une ‘data.table’. ‘With = FALSE’ est souvent utile dans ‘data.table’ pour sélectionner dynamiquement les colonnes.

47
akrun