を式のリストを適用します、私はdata.tableと式のリストを持っているRにdata.table
DT <- data.table(A = c(1:3), B = c(3:1), C = c(4:6), D = (6:4))
l <- list(f1 = "A + B", f2 = "B + C", f3 = "C - D", f4 = "D/A")
これは
DT[, ":="(f1 = A + B, f2 = B + C, f3 = C - D, f4 = D/A)]
または
for (i in 1:length(l)) {
DT[, eval(names(l)[i]) := eval(parse(text=l[[i]]))]
}
によって達成することができます
ループを使用せずにl
の情報を使用してこれを行う方法はありますか?
# some code
DT
# A B C D f1 f2 f3 f4
# 1: 1 3 4 6 4 7 -2 6.000000
# 2: 2 2 5 5 4 7 0 2.500000
# 3: 3 1 6 4 4 7 2 1.333333
ループの問題は何ですか?すべてのループが悪いわけではありません。 – dayne
ループを避ける方法があるかどうかを知りたいのですが... –
'lapply'を使用すると、一般的に列に対するループを避けることができますが、ループを使うのは大変なことではありません。最初に、私はあなたがテキストではなく式としてこれらを保存すべきだと思います: 'L = lapply(l、function(x)parse(text = x))'。それで 'DT [、\':= \ '(names(L)、lapply(L、eval、.SD)]]'のようなものですが、 – Frank