Deux façons de sélectionner par programme des variables:
- with = FALSE:
 -  DT = data.table(col1 = 1:3)
 colname = "col1"
 DT[, colname, with = FALSE] 
 
 
 
 
 
- ..Préfixe 'dot dot' ( ):
 -  DT[, ..colname]    
 
 
 
 
 
Pour une description plus détaillée de la ..notation «point point» ( ), voir Nouvelles fonctionnalités de la 1.10.2 (elle n'est actuellement pas décrite dans le texte d'aide).
Pour attribuer une ou plusieurs variables, placez la LHS de :=entre parenthèses:
DT[, (colname) := 4:6]    
Ce dernier est connu sous le nom de plonk de colonne , car vous remplacez le vecteur de colonne entier par référence. Si un sous-ensemble iétait présent, il se sous-attribuerait par référence. Le parens autour (colname)est un raccourci introduit dans la version v1.9.4 sur CRAN octobre 2014. Voici la nouvelle :
L'utilisation de with = FALSEwith :=est désormais déconseillée dans tous les cas, étant donné que l'encapsulation de la LHS de :=avec des parenthèses est préférée depuis un certain temps.
colVar = "col1"
DT[, (colVar) := 1]                             
DT[, c("col1", "col2") := 1]                    
DT[, 2:4 := 1]                                  
DT[, c("col1","col2") := list(sum(a), mean(b))]  
DT[, `:=`(...), by = ...]                       
Voir également la section Détails dans ?`:=`:
DT[i, (colnamevector) := value]
Et pour répondre à une autre question en commentaire, voici une façon (comme d'habitude, il y a plusieurs façons):
DT[, colname := cumsum(get(colname)), with = FALSE]
ou, vous pourriez trouver plus facile de lire, d'écrire et de déboguer juste à evalun paste, similaire à la construction d'une instruction SQL dynamique à envoyer à un serveur:
expr = paste0("DT[,",colname,":=cumsum(",colname,")]")
expr
eval(parse(text=expr))
Si vous faites beaucoup cela, vous pouvez définir une fonction d'assistance EVAL:
EVAL = function(...)eval(parse(text=paste0(...)),envir=parent.frame(2))
EVAL("DT[,",colname,":=cumsum(",colname,")]")
Maintenant que la data.table1.8.2 optimise automatiquement l' jefficacité, il peut être préférable d'utiliser la evalméthode. Le get()in jempêche certaines optimisations, par exemple.
Ou, il y en a set(). Une forme fonctionnelle de faible frais généraux, :=qui conviendrait ici. Voir ?set.
set(DT, j = colname, value = cumsum(DT[[colname]]))
DT