これは、コンポーネントdata.table
のスコープ ルールを使用するための適切な候補のようです。j
詳細については、FAQ 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]
これにより、 と のそれぞれ 1 回の繰り返しがcol1
回避され、 ;col2
の 2 回の繰り返しが回避されます。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 に送信できます。