2015-07-30 8 views
2

У меня есть вопрос об индексировании с помощью xts. Я понимаю, что когда я использую SPY['2002-10-17/'], я могу получить все данные в моем объекте xts с 2002-10-17 до последней даты. Это, однако, неверно, если я напишу оператор ifelse и сделаю тот же вызов. Ниже приведен код:Ошибка индексации индексации xxt

library(quantmod) 
getSymbols('SPY',from='2002-01-01') 
SPY=Cl(SPY) #pull only the closes 
returns=(SPY-lag(SPY,1))/(lag(SPY,1)) #returns calculation 
head(SPY['2002-10-17/']) #This works and starts at 2002-10-17 
head(ifelse(returns>0,1,0)['2002-10-17/']) #this for some odd reason starts at 2002-10-18 

Может ли кто-нибудь сказать мне, почему это так. Я действительно одурманен.

Как Джошуа предложил здесь выход из sessionInfo()

> sessionInfo() 
R version 3.2.0 (2015-04-16) 
Platform: x86_64-w64-mingw32/x64 (64-bit) 
Running under: Windows 7 x64 (build 7601) Service Pack 1 

locale: 
[1] LC_COLLATE=English_United States.1252 LC_CTYPE=English_United States.1252 
[3] LC_MONETARY=English_United States.1252 LC_NUMERIC=C       
[5] LC_TIME=English_United States.1252  

attached base packages: 
[1] stats  graphics grDevices utils  datasets methods base  

other attached packages: 
[1] quantmod_0.4-3 TTR_0.22-0  xts_0.9-7  zoo_1.7-12  

loaded via a namespace (and not attached): 
[1] tools_3.2.0  grid_3.2.0  lattice_0.20-31   
+0

Ваш код работает для меня. Пожалуйста, добавьте вывод из 'sessionInfo()' к вашему вопросу. И попробуйте запустить код из нового сеанса R. Возможно, что-то в вашей рабочей области вызывает проблемы. –

+0

Спасибо, что ответили. Я перезапустил свой компьютер и произошла ошибка. Я добавил вывод sessionInfo(), как вы предлагали. –

+0

Не удается подтвердить ошибку. Работает в обоих случаях на моем компьютере, с данными, начиная с 17 октября 2002 года. – RHertel

ответ

1

Я могу подтвердить это поведение в xts_0.9-7. Это a bug that has been fixed в development version.

Ошибка в логическом операторе (>), отбрасывающего атрибут часовой пояс для объекта xts. Это приводит к тому, что индекс будет компенсирован тем, что в течение нескольких часов ваш часовой пояс будет смещен с UTC. Таким образом, логический оператор существенно меняет интерпретацию индекса объекта, созданного логическим оператором.

> head((returns > 0)['2002-10-17/']) 
      SPY.Close 
2002-10-18  TRUE 
2002-10-21  TRUE 
2002-10-22  FALSE 
2002-10-23  TRUE 
2002-10-24  FALSE 
2002-10-25  TRUE 
> indexTZ(returns) 
[1] "UTC" 
> indexTZ(returns > 0) 
[1] "" 
+0

Спасибо. Он работал с версией xts 0.9.874. –

Смежные вопросы