这似乎是data.table
使用组件范围规则的好选择j
。有关详细信息,请参阅常见问题解答 2.8。
来自常见问题
没有匿名函数被传递给 j。相反,将一个匿名主体传递给 j。
所以,对于你的情况
library(data.table)
DT <- as.data.table(df)
DT[,{
col1=some_function(y)
col2=some_other_function(y)
col3= col1 *col2
list(col1 = col1, col2 = col2, col3 = col3)
}, by = col]
或更直接的方式:
DT[,list(
col1=col1<-some_function(y)
col2=col2<-some_other_function(y)
col3=col1*col2
), by = col]
col1
这避免了和的每个重复col2
,并避免了 ; 的两次重复col3
。重复是我们努力减少的事情data.table
。=
后面的可能<-
最初看起来很麻烦。但是,这允许以下语法糖:
DT[,list(
"Projected return (%)"= col1<-some_function(y),
"Investment ($m)"= col2<-some_other_function(y),
"Return on Investment ($m)"= col1*col2
), by = col]
例如,输出可以直接发送到 Latex 或 html。