Ich habe eine data.table und eine Liste von Formeln,eine Liste der Formeln R data.table Nehmen
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")
Dies kann durch
DT[, ":="(f1 = A + B, f2 = B + C, f3 = C - D, f4 = D/A)]
oder
for (i in 1:length(l)) {
DT[, eval(names(l)[i]) := eval(parse(text=l[[i]]))]
}
erreicht werden
Gibt es eine Möglichkeit, dies unter Verwendung der Informationen in l
ohne Verwendung von Schleife zu tun?
# 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
Was ist das Problem mit der Schleife hier? Nicht alle Schleifen sind schlecht. – dayne
Ich möchte nur wissen, ob es eine Möglichkeit gibt, Schleife zu vermeiden ... –
Sie können 'lapply' verwenden, um Schleifen über Spalten zu vermeiden, aber es ist nicht immer eine große Sache, nur eine Schleife zu verwenden, wie Dayne sagte. Erstens sollten Sie diese als Ausdrücke speichern, nicht als Text: 'L = lapply (l, function (x) parse (text = x))'. Dann etwas wie 'DT [, \': = \ '(Namen (L), Lapply (L, Eval, .SD))], das funktioniert, aber ich bin mir nicht sicher, ist koscher. – Frank