2013-05-07 3 views
1

У меня возникли трудности с использованием функции dailyReturn на объекте xts с несколькими циклами возврата.dailyReturn 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, вы можете 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 Я использовал так, что он будет работать с любым количеством колонок.

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