2
data.tableの代入演算子を使用して、既存の列を一定量で分割して新しい列を作成したいとします。私が試しているコードは、式の性質上、2項演算子のエラーをスローします。ここでdata.tableに名前付きベクトルを代入して算術演算を行う
は私がしようとしているものです:
DT <- data.table(x1=1:4,x2=5:8,x3=9:12)
DT[, c("y1","y2") := mget(c("x1","x2"))] # works as expected
DT[, c("y3","y4") := mget(c("x1","x2"))/2] # Error in mget(c("x1", "x2"))/2 : non-numeric argument to binary operator
列名は変数、したがって文字ベクトルを通過しています。これを行う別の方法がありますか?
おかげで割ます!私はエラーの原因を理解していないので、私はそれをループするとは思わなかった。最初の方法は、 'mget'を使って私のために働いた。 2番目のアプローチでは、慣用であれば答えを 'eval(c(" x1 "、" x2 ")に変更できますか?私は質問で変数名を単純化していました。 – Naumz
@Naumz 'eval'は列の値を返さないので、' mget'または 'get'(1つの列)が必要です。 .SDcols = c( "x1"、 "x2") 'または.SDcols = c(1,2)つまり、カラムインデックス – akrun
私はそれをお勧めしませんが、' DT [、setDT(mget(paste0 "DT [、.SD/2、.SDcols = x1:x2]" – Frank