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