2014-10-31 46 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