Câu trả lời ngắn gọn: có, xem câu trả lời được chấp nhận.Có thể có đối tượng chức năng làm thành phần
Tôi có hai data.table
bên dưới.
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 với mỗi hàng trong stocks
, tôi muốn tìm ra xấp xỉ y
cho t
, dựa trên nội suy tuyến tính của các giá trị trong tt
.
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
Vấn đề là làm theo cách này có nhiều phép tính trùng lặp. Lý tưởng nhất là tôi muốn xác định một approxfun
cho mỗi ngày và áp dụng nó cho mỗi hàng trong stocks
. Nhưng datatable không thể lấy các đối tượng hàm làm phần tử của nó.
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.
Câu hỏi của tôi là:
- Có cách nào tốt hơn là làm
approx
trên mỗi hàng (và bị chậm)? - Có thể đặt dữ liệu để có đối tượng hàm làm phần tử của nó không?
hackiness không cần thiết – eddi