Mehrere Spalten zu R data.table in einem Funktionsaufruf hinzufügen?

Ich habe eine Funktion, die zwei Werte in einer Liste zurückgibt. Beide Werte müssen zu einer data.table in zwei neuen Spalten hinzugefügt werden. Die Evaluierung der Funktion ist kostspielig, daher möchte ich vermeiden, die Funktion zweimal berechnen zu müssen. Hier ist das Beispiel:

library(data.table)
example(data.table)
DT
   x y  v
1: a 1 42
2: a 3 42
3: a 6 42
4: b 1  4
5: b 3  5
6: b 6  6
7: c 1  7
8: c 3  8
9: c 6  9

Hier ist ein Beispiel meiner Funktion. Denken Sie daran, dass ich sagte, dass dies eine kostspielige Berechnung ist. Außerdem gibt es keine Möglichkeit, einen Rückgabewert von den anderen angegebenen Werten abzuleiten (wie im folgenden Beispiel):

myfun <- function (y, v) 
{
ret1 = y + v
ret2 = y - v
return(list(r1 = ret1, r2 = ret2))
}

Hier ist meine Möglichkeit, zwei Spalten in einer Anweisung hinzuzufügen. Das muss man aber zweimal bei myfun anrufen:

DT[,new1:=myfun(y,v)$r1][,new2:=myfun(y,v)$r2]

   x y  v new1 new2
1: a 1 42   43  -41
2: a 3 42   45  -39
3: a 6 42   48  -36
4: b 1  4    5   -3
5: b 3  5    8   -2
6: b 6  6   12    0
7: c 1  7    8   -6
8: c 3  8   11   -5
9: c 6  9   15   -3

Irgendwelche Vorschläge, wie das geht? Ich könnte rettenr2 Jedes Mal, wenn ich myfun aufrufe, muss ich in einer separaten Umgebung nur zwei Spalten nach Verweis gleichzeitig hinzufügen.

Antworten auf die Frage(5)

Ihre Antwort auf die Frage