2014-10-31 57 views
0

是否可以使用某種形式的數組併發送它以逐行應用?我到目前爲止嘗試過的所有內容都會導致錯誤「不正確的維數」,這是其他人在這裏遇到的一個常見錯誤,但我無法找到以及如何在下面的TestFunc2中嘗試執行的示例。使用多列數據生成單個數字輸出

require(quantmod) 

getSymbols("SPY",src="yahoo") 

nData = 10 
data = ClCl(SPY)[1:nData,] 

TestFunc1 = function(d1, x1, y1){ 
    res1 = (d1 + 2*x1)^2 + y1 
} 

#X1 is a constant - this works 
X1 = .2 
Y1 = 1 
tmp1 = apply(data, 1, TestFunc1, X1, Y1) 
Result1 = cbind(data, X1, Y1, tmp2) 



TestFunc2 = function(z1, y1){ 
    d1 = z1[,1] 
    x1 = z1[,2] 
    res2 = (d1 + 2*x1)^2 + y1 
} 

X2 = xts(1:nData, order.by=index(data)) 
Z1 = cbind(data, X2) 
tmp2 = apply(Z1, 1, TestFunc2, Y1) 

Result2 = cbind(data, X2, Y1, tmp2) 

回答

0

我相信你的問題是,你在TestFunc2對待z1的方式。 applyZ1的每一行傳遞給z1TestFunc2作爲的矢量,而不是作爲data.frame。修復它定義爲TestFunc2爲:

TestFunc2 = function(z1, y1){ 
    d1 = z1[1] 
    x1 = z1[2] 
    res2 = (d1 + 2*x1)^2 + y1 
} 
+0

謝謝克里斯託弗。它確實有效,但我確實沒有看到閱讀適用的幫助頁面。我很感激幫助。 – LGTrader 2014-11-01 04:15:12