使用多列数据应用以生成单个数字输出

时间:2014-10-31 22:04:54

标签: r

是否可以使用某种形式的数组并将其发送到逐行应用?到目前为止,我所尝试过的所有内容都会导致错误"维度数量不正确"这是其他人在这里遇到的常见错误,但我无法找到如何做我在下面的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)

1 个答案:

答案 0 :(得分:0)

我相信您的问题就是您在z1中对待TestFunc2的方式。 applyZ1的每一行传递到z1 TestFunc2作为向量,而不是data.frame。要解决此问题,请将TestFunc2定义为:

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