Добавить несколько столбцов в R data.table одним вызовом функции?

У меня есть функция, которая возвращает два значения в списке. Оба значения необходимо добавить в таблицу данных в два новых столбца. Вычисление функции требует больших затрат, поэтому я хотел бы избежать двойного вычисления функции. Вот пример:

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

Вот пример моей функции. Помните, я сказал, что это дорогостоящие вычисления, кроме того, нет способа вывести одно возвращаемое значение из других заданных значений (, как в примере ниже):

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

Вот мой способ добавить два столбца в один оператор. Однако для этого нужно дважды вызвать myfun:

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

Любые предложения о том, как это сделать? Я мог бы сохранять r2в отдельной среде каждый раз, когда я вызываю myfun, мне просто нужен способ добавить два столбца по ссылке за раз.

67
задан Florian Oswald 3 July 2012 в 10:13
поделиться