最佳答案
我有一个函数,它返回列表中的两个值。这两个值都需要在两个新列中添加到 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
每次我调用我的乐趣,我只是需要一个方法来添加两个列的参考一次。