:=
同じデータ テーブルを使用して、長い一連の連鎖計算を行っていることがよくあります。たとえば、このようなもの
test = data.table(1:10, 1:10, 1:10, 1:10)
test[, V1 := V1^2]
test[, V2 := V1*V2]
test[, V3 := V2/V3]
test[, V4 := sqrt(V3)]
test[, new := letters[V4]]
すべての行に書き込むtest[, ...]
必要があるため、1) 入力に時間がかかります (私が対処できる大きな問題ではありません)。しかし、もっと重要なことは、計算の流れと内容から視覚的に注意をそらすことでもあります。私はむしろ次のようなものを書きたいです
test[, {
V1 := V1^2
V2 := V1*V2
V3 := V2/V3
V4 := sqrt(V3)
new := letters[V4]
}]
しかし、これはのエラーをスローしますYou have wrapped := with {} which is ok but then := must be the only thing inside {}
。
書けることを知っている
within(test, {
V1 = V1^2
V2 = V1*V2
V3 = V2/V3
V4 = sqrt(V3)
new = letters[V4]
})
しかし、これは使用効率を失います:=
この機能を提供する関数を書いてみました
with.dt = function(dt, expressions){
e = strsplit(expressions,'\n')
for (i in 1:length(e)){
dt[, eval(parse(text = e[i]))]
}
dt
}
with.dt(test, "
V1 := V1^2;
V2 := V1*V2;
V3 := V2/V3;
V4 := sqrt(V3);
new := letters[V4];
")
しかし、これはdata.tableの内容を変更しません
within
の参照による割り当てプロパティを保持しながら、バージョンのすっきりとした外観を可能にする構文はあります:=
か?