Ошибка индекса после вызова transform/as.xts

У меня есть числовая матрица xts, к которой мне нужно применить много преобразований. Согласно этому thread объект, возвращаемый функцией transform(), должен быть обернут вызовом as.xts() (у xts нет собственной версии преобразования, и зоопарк возвращает новый объект).

Я попробовал преобразовать некоторые образцы данных, и, похоже, все работает нормально, но когда я запускаю его на своих собственных данных, я получаю эту ошибку:

Browse[2]> class(myxts)
[1] "xts" "zoo"
Browse[2]> mode(myxts)
[1] "numeric"
Browse[2]> str(myxts)
An 'xts' object from 2011-07-22 09:30:00 to 2011-12-19 16:00:00 containing:
  Data: num [1:11606, 1:19] 0 158300 157700 157600 157900 ...
  - attr(*, "dimnames")=List of 2
  ..$ : NULL
  ..$ : chr [1:19] "Open" "High" "Low" "Close" ...
  Indexed by objects of class: [POSIXlt,POSIXt] TZ: 
  xts Attributes:  
 NULL
Browse[2]> head(myxts['2011-07-22'])
                      Open   High    Low  Close
2011-07-22 09:30:00      0      0      0      0      
2011-07-22 09:31:00 158300 158400 157600 157800     
2011-07-22 09:32:00 157700 157700 157500 157700 
2011-07-22 09:33:00 157600 157900 157599 157900
2011-07-22 09:34:00 157900 158100 157800 158100
2011-07-22 09:35:00 158000 158400 157900 158200 
Browse[2]> n
debug: myxts = as.xts(transform(myxts, Open = ifelse(Open == 
    0, NA, Open), Close = ifelse(Close == 0, NA, Close), High = ifelse(High == 
    0, NA, High), Low = ifelse(Low == 0, NA, Low)))
Browse[2]> class(myxts)
[1] "xts" "zoo"
Browse[2]> head(myxts['2011-07-22'])
Error in function (year = 1970, month = 1, day = 1, hour = 0, min = 0,  : 
  unused argument(s) (tz1 = "", tz2 = "EST", tz3 = "EDT")
Browse[2]> str(myxts)
An 'xts' object from 2011-07-22 09:30:00 to 2011-12-19 16:00:00 containing:
  Data: num [1:11606, 1:19] NA 158300 157700 157600 157900 ...
  - attr(*, "dimnames")=List of 2
  ..$ : NULL
  ..$ : chr [1:19] "Open" "High" "Low" "Close" ...
   Indexed by objects of class: [POSIXlt,POSIXt] TZ: 
  TZ: EST
  TZ: EDT
  xts Attributes:  
 NULL

ПРИМЕЧАНИЕ

Есть 2 поля TZ: EST/EDT, добавленные к выходным данным str(myxts) после вызова transform().


person Robert Kubrick    schedule 27.02.2012    source источник


Ответы (1)


Я думаю, что проблема в несоответствии индекса TZ, установленного as.xts() и xts(). Моя переменная среды TZ не установлена, и исходный объект xts был создан без определенного значения TZ, как сообщает str().

Однако после вызова transform() и as.xts() для индекса TZ устанавливается значение EST/EDT. as.xts(), вероятно, получает часовой пояс из какого-либо другого источника, кроме переменной env.

Установив индекс TZ в пустую строку (или любое другое значение переменной TZ env), я смог восстановить выбор индексации в объекте as.xts():

indexTZ(myxts) = Sys.getenv("TZ")
person Robert Kubrick    schedule 27.02.2012