daily返回xts对象

时间:2013-05-07 15:45:52

标签: r xts quantmod

我在使用多个返回系列的xts对象上使用dailyReturn函数时遇到了困难。

a<-Cl(getSymbols("INTC",auto.assign=FALSE))
b<-Cl(getSymbols("IBM",auto.assign=FALSE))
a<-merge(a,b)
dailyReturn(a[,1]) #This works!
dailyReturn(a) #Only return the result for first series
apply(a,2, dailyReturn) 
#Error in array(ans, c(len.a%/%d2, d.ans), if (!all(vapply(dn.ans, is.null,  : 
length of 'dimnames' [1] not equal to array extent

如何让dailyReturn返回xts对象中多个系列的每日回报?

2 个答案:

答案 0 :(得分:2)

我只会使用TTR::ROC

> head(r <- ROC(a, type="discrete"))
              INTC.Close    IBM.Close
2007-01-03            NA           NA
2007-01-04  0.0402948403  0.010691889
2007-01-05 -0.0033065659 -0.009052996
2007-01-08 -0.0042654028  0.015191952
2007-01-09  0.0009519277  0.011830131
2007-01-10  0.0233000476 -0.011791746

答案 1 :(得分:2)

我也更喜欢ROC,但如果您必须使用dailyReturn,则可以lapply覆盖列,cbind将它们重新组合在一起。

> head(do.call(cbind, lapply(a, dailyReturn)))
           daily.returns daily.returns.1
2007-01-03  0.0000000000     0.000000000
2007-01-04  0.0402948403     0.010691889
2007-01-05 -0.0033065659    -0.009052996
2007-01-08 -0.0042654028     0.015191952
2007-01-09  0.0009519277     0.011830131
2007-01-10  0.0233000476    -0.011791746

我使用了do.call,因此可以使用任意数量的列。