2017-06-24 2 views
1

La conversion de données à xts échoue lors de la mise à jour de xts 0.9.7 à 0.10.0.La conversion de Xts échoue lors de la mise à jour de 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" 

Devinez XTS 0.10.0 n'est pas une construction finie. Pourtant, j'ai mis à jour à 0.10.0 comme paquet quantstrat nécessite paquet blotter, qui nécessite xts 0.10.0. J'avais besoin de ceci pour transformer une dataframe de données de tick dans un objet de xts, pour exécuter une stratégie de quantstrat dessus (exige des objets de xts).

Répondre

3

Ceci est un problème avec votre session R, pas avec xts. Je vais supposer que vous exécutez RStudio sous Windows, où les paquets ne sont pas correctement mis à jour si une session R utilise actuellement le paquet lorsque vous essayez de mettre à jour.

La solution consiste à fermer toutes vos sessions R en cours d'exécution, puis à installer xts à partir de GitHub.

Une fois que vous faites cela, vous aurez également besoin de changer votre appel à as.xts, parce que les objets XTS n'aiment pas POSIXlt index (car ils sont une liste des composants de temps, pas le nombre de secondes de l'époque, comme POSIXct).

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

Je vais ouvrir un problème pour corriger l'erreur. Cela devrait être aussi simple que de convertir l'objet POSIXlt en POSIXct dans l'appel as.xts.

+0

La conversion de 'POSIXlt' à' POSIXct' a résolu le problème. Ca a du sens. Intéressant ce n'était pas un problème sur xts 0.9.7. Merci Joshua. – Krug

+1

@Gracos: Voir [numéro 194] (https://github.com/joshuaulrich/xts/issues/194). On dirait que c'est quelque chose que j'ai présenté en corrigeant un autre problème. –