是否可以使用某种形式的数组并将其发送到逐行应用?到目前为止,我所尝试过的所有内容都会导致错误"维度数量不正确"这是其他人在这里遇到的常见错误,但我无法找到如何做我在下面的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 :(得分:0)
我相信您的问题就是您在z1
中对待TestFunc2
的方式。 apply
将Z1
的每一行传递到z1
TestFunc2
作为向量,而不是data.frame。要解决此问题,请将TestFunc2
定义为:
TestFunc2 = function(z1, y1){
d1 = z1[1]
x1 = z1[2]
res2 = (d1 + 2*x1)^2 + y1
}