我在使用多个返回系列的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对象中多个系列的每日回报?
答案 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
,因此可以使用任意数量的列。