2013-05-07 4 views
1

복수 반환 시리즈가있는 xts 객체에서 dailyReturn 함수를 사용하는 데 어려움이 있습니다.daily returns with xts object

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

는 또한 ROC 선호하지만, 당신이 dailyReturn를 사용해야하는 경우, 당신이 열을 통해 lapplycbind 그들을 다시 함께 할 수 있습니다.

> 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을 사용하여 임의의 수의 열에서 작동합니다.

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