Xts преобразование завершается неудачно при обновлении с xts 0.9.7 до 0.10.0

Преобразование датафрейма в xts завершается неудачно при обновлении с xts 0.9.7 до 0.10.0.

#THIS WORKS (uses xts 0.9.7):

library(xts)          
DFX <- structure(list(DateTime = structure(list(sec = c(0, 0, 0), min = c(10L, 0L, 5L), hour = c(17L, 18L, 18L), mday = c(24L, 24L, 24L), mon = c(5L, 5L, 5L), year = c(114L, 114L, 114L), wday = c(2L, 2L, 2L), yday = c(174L, 174L, 174L), isdst = c(1L, 1L, 1L), zone = c("EDT", "EDT", "EDT"), gmtoff = c(NA_integer_, NA_integer_, NA_integer_)), .Names = c("sec", "min", "hour", "mday", "mon", "year", "wday", "yday", "isdst", "zone", "gmtoff"), class = c("POSIXlt", "POSIXt")), Open = c(125.03, 125.34, 125.85)), .Names = c("DateTime", "Open"), class = "data.frame", row.names = 558:560)
DFX <- as.xts(DFX[, -1], order.by = DFX$DateTime)


#THIS DOESN'T WORK (uses xts 0.10.1):

install.packages("devtools")
require(devtools)
install_github("joshuaulrich/xts")
library(xts)          
DFX <- structure(list(DateTime = structure(list(sec = c(0, 0, 0), min = c(10L, 0L, 5L), hour = c(17L, 18L, 18L), mday = c(24L, 24L, 24L), mon = c(5L, 5L, 5L), year = c(114L, 114L, 114L), wday = c(2L, 2L, 2L), yday = c(174L, 174L, 174L), isdst = c(1L, 1L, 1L), zone = c("EDT", "EDT", "EDT"), gmtoff = c(NA_integer_, NA_integer_, NA_integer_)), .Names = c("sec", "min", "hour", "mday", "mon", "year", "wday", "yday", "isdst", "zone", "gmtoff"), class = c("POSIXlt", "POSIXt")), Open = c(125.03, 125.34, 125.85)), .Names = c("DateTime", "Open"), class = "data.frame", row.names = 558:560)
DFX <- as.xts(DFX[, -1], order.by = DFX$DateTime)

#Error message:
#Error in .Call("do_is_ordered", x = x, increasing = as.logical(increasing),  : 
#                 "do_is_ordered" not available for .Call() for package "xts"

Думаю, xts 0.10.0 не является законченной сборкой. Тем не менее, я обновил до 0.10.0, так как для пакета quantstrat требуется пакет blotter, для которого требуется xts 0.10.0. Мне нужно было это превратить тиковый фрейм данных в объект xts, чтобы запустить на нем стратегию quantstrat (требуются объекты xts).

1 ответ

Решение

Это проблема с вашей R-сессией, а не с xts. Я предполагаю, что вы используете RStudio в Windows, где пакеты не обновляются правильно, если какой-либо сеанс R в данный момент использует пакет при попытке обновления.

Решение состоит в том, чтобы закрыть все запущенные сеансы R, а затем установить xts из GitHub.

Как только вы это сделаете, вам также нужно будет изменить свой вызов на as.xtsпотому что хтс объекты не нравятся POSIXlt индексы (потому что они представляют собой список компонентов времени, а не количество секунд от эпохи, как POSIXct).

R> DFX <- as.xts(DFX[, -1], order.by = DFX$DateTime)
Error in is.finite(order.by) : 
  default method not implemented for type 'list'

Я открою проблему, чтобы исправить ошибку. Это должно быть так же просто, как преобразование POSIXlt Возражать POSIXct внутри as.xts вызов.

Другие вопросы по тегам