我有一个函数,在列表中返回两个值.这两个值都需要添加到两个新列的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
Run Code Online (Sandbox Code Playgroud)
这是我的功能的一个例子.记住我说这是昂贵的计算,除此之外,没有办法从其他给定值中推导出一个返回值(如下例所示):
myfun <- function (y, v)
{
ret1 = y + v
ret2 = y - v
return(list(r1 = ret1, r2 = ret2))
}
Run Code Online (Sandbox Code Playgroud)
这是我在一个语句中添加两列的方法.那个人需要两次打电话给myfun:
DT[,new1:=myfun(y,v)$r1][,new2:=myfun(y,v)$r2]
x y v new1 new2
1: a 1 42 43 -41 …Run Code Online (Sandbox Code Playgroud)