У меня есть функция, которая возвращает два значения в списке. Оба значения должны быть добавлены в таблицу данных в двух новых столбцах. Оценка функции является дорогостоящей, поэтому я бы хотел избежать вычисления функции дважды. Вот пример:
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, мне просто нужно добавить два столбца по ссылке.