0

从 xts 0.9.7 更新到 0.10.0 时,Dataframe 到 xts 的转换失败。

#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包需要吸墨器包,它需要 xts 0.10.0。我需要它来将刻度数据数据框转换为 xts 对象,以在其上运行 quantstrat 策略(需要 xts 对象)。

4

1 回答 1

2

这是您的 R 会话的问题,而不是 xts。我将假设您在 Windows 上运行 RStudio,如果在您尝试更新时任何 R 会话当前正在使用该包,则该包不会正确更新。

解决方案是关闭所有正在运行的 R 会话,然后从 GitHub 安装 xts。

完成此操作后,您还需要将调用更改为as.xts,因为 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

于 2017-06-24T14:10:40.843 回答