短い回答:はい、受け入れられた回答を参照してください。ファンクションオブジェクトを要素として持つことは可能ですか?
私は以下の2つを持っています。data.table
stocks
の各行について
stocks = data.table(Ticker = c('xx','xx','yy','yy'), Date = c(as.IDate("2000-01-01"), as.IDate("2000-01-02")), t = c(1.8, 3.5))
Ticker Date t
1: xx 2000-01-01 1.8
2: xx 2000-01-02 3.5
3: yy 2000-01-01 1.8
4: yy 2000-01-02 3.5
tt = data.table(Date = c(as.IDate("2000-01-01"), as.IDate("2000-01-02")), t0 = c(1,2), t1 = c(2,3), t2 = c(3,4), y0 = c(10, 20), y1 = c(-20, -30), y2 = c(33,44))
Date t0 t1 t2 y0 y1 y2
1: 2000-01-01 1 2 3 10 -20 33
2: 2000-01-02 2 3 4 20 -30 44
、Iはtt
の値の線形補間に基づいて、t
所与近似y
を見つけたいです。
zz = tt[stocks, on = 'Date']
zz[, y.approx := approx(c(t0,t1,t2), c(y0,y1,y2), t)$y, by = 'Date,Ticker']
Date t0 t1 t2 y0 y1 y2 Ticker t y.approx
1: 2000-01-01 1 2 3 10 -20 33 xx 1.8 -14
2: 2000-01-02 2 3 4 20 -30 44 xx 3.5 7
3: 2000-01-01 1 2 3 10 -20 33 yy 1.8 -14
4: 2000-01-02 2 3 4 20 -30 44 yy 3.5 7
問題は、この方法を行うことは、重複計算をたくさん持っているということです。理想的には、毎日approxfun
を定義し、それをstocks
の各行に適用したいと考えています。しかし、データテーブルは、その要素として関数オブジェクトをとることはできません。
tt[, ff := approxfun(c(t0,t1,t2), c(y0,y1,y2)), by = Date]
Error in `[.data.table`(tt, , `:=`(ff, approxfun(c(t0, t1, t2), c(y0, :
j evaluates to type 'closure'. Must evaluate to atomic vector or list.
私の質問は:
- は、各行に
approx
をやって(と低速である)よりも良い方法はありますか? - datatableが関数オブジェクトを要素として持つことは可能ですか?
不要hackiness – eddi