¿Agregar columnas múltiples a R data.table en una llamada de función?

Tengo una función que devuelve dos valores en una lista. Ambos valores deben agregarse a una tabla de datos en dos nuevas columnas. La evaluación de la función es costosa, por lo que me gustaría evitar tener que calcular la función dos veces. Aquí está el ejemplo:

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

Aquí hay un ejemplo de mi función. Recuerde que dije que es un cálculo costoso, además de eso no hay forma de deducir un valor de retorno de los otros valores dados (como en el ejemplo a continuación):

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

Aquí está mi manera de agregar dos columnas en una declaración. Ese necesita llamar a myfun dos veces, sin embargo:

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

¿Alguna sugerencia sobre cómo hacer esto? Yo podria salvarr2 en un entorno diferente cada vez que llamo myfun, solo necesito una forma de agregar dos columnas por referencia a la vez.

Respuestas a la pregunta(5)

Su respuesta a la pregunta