プログラムで変数を選択する2つの方法:
with = FALSE
:
DT = data.table(col1 = 1:3)
colname = "col1"
DT[, colname, with = FALSE]
'ドットドット'(..
)プレフィックス:
DT[, ..colname]
'dot dot'(..
)表記の詳細については、1.10.2の新機能を参照してください(現在、ヘルプテキストには記載されていません)。
変数に割り当てるには、のLHSを:=
括弧で囲みます。
DT[, (colname) := 4:6]
後者は、列ベクトル全体を参照で置き換えるため、列プロンクと呼ばれます。サブセットi
が存在する場合、参照によってサブ割り当てされます。周りの(colname)
親は、 2014年10月のCRANのバージョンv1.9.4で導入された速記です。ニュース項目は次のとおりです。
使うwith = FALSE
とすると、:=
今のLHS包むことを考えると、すべてのケースで廃止され:=
、括弧ではいくつかの時間のために好まれています。
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 = ...]
の詳細セクションも参照してください?`:=`
。
DT[i, (colnamevector) := value]
そして、コメントでさらに質問に答えるために、ここに1つの方法があります(いつものように多くの方法があります):
DT[, colname := cumsum(get(colname)), with = FALSE]
または、あなたはそれが簡単に、ちょうどへの書き込みとデバッグ読むことを見つけるかもしれないサーバーに送信するための動的SQLステートメントを構築するための類似しました、:eval
paste
expr = paste0("DT[,",colname,":=cumsum(",colname,")]")
expr
eval(parse(text=expr))
それをたくさん行う場合は、ヘルパー関数を定義できますEVAL
。
EVAL = function(...)eval(parse(text=paste0(...)),envir=parent.frame(2))
EVAL("DT[,",colname,":=cumsum(",colname,")]")
今ことdata.table
1.8.2を自動的に最適化j
効率のために、使用することが好ましいeval
方法。get()
中には、j
例えば、いくつかの最適化を防ぐことができます。
または、がありset()
ます。オーバーヘッドが低く、機能的な形式の:=
、ここでは問題ありません。を参照してください?set
。
set(DT, j = colname, value = cumsum(DT[[colname]]))
DT