xts错误 - 请帮助解释行为

时间:2012-11-12 17:40:09

标签: r xts

我的R版本是2.15.1我正在关注Luis Torgo的“预测股市回报”案例研究。当我尝试从csv文件或从Web导入数据集时,这两种方法都失败了

Error in as.POSIXlt.character(x, tz, ...) : 
  character string is not in a standard unambiguous format

我继续使用可用的.RData文件。但是,当我尝试运行T.ind函数时,我得到的错误相同

> T.ind <- function(quotes, tgt.margin = 0.025, n.days = 10) {
+ v <- apply(HLC(quotes), 1, mean)
+ r <- matrix(NA, ncol = n.days, nrow = NROW(quotes))
+ for (x in 1:n.days) r[, x] <- Next(Delt(v, k = x), x)
+ x <- apply(r, 1, function(x) sum(x[x > tgt.margin | x <
+ -tgt.margin]))
+ if (is.xts(quotes))
+ xts(x, time(quotes))
+ else x
+ }

所以,我手动执行每个命令,逐行替换各个值的参数 并将错误追溯到该行:

 >xts(x,time(GSPC)) #'quote' replaced with 'GSPC'
 Error in as.POSIXlt.character(x, tz, ...) : 
   character string is not in a standard unambiguous format

令人惊讶的是,经过多次试验和错误后,我发现删除2行会使其正常工作!

 > GSPC_new<-GSPC[-c(1073,1325),]
 > x_new<-x[-c(1073,1325)]
 > xts_obj<-xts(x_new,time(GSPC_new))

之前有没有人遇到过这种现象?对此可能有什么解释? 感谢您抽出时间阅读并回答此问题!

1 个答案:

答案 0 :(得分:3)

错误来自as.POSIXlt.character,这是在将字符数据强制转换为POSIXlt对象时调用的方法(即R可以理解为日期时间而不仅仅是字符串)。< / p>

这意味着您的日期时间数据向量不会以被识别为标准日期时间格式的格式记录:

else if (all(!is.na(strptime(xx, f <- "%Y-%m-%d %H:%M:%OS", 
    tz = tz))) || all(!is.na(strptime(xx, f <- "%Y/%m/%d %H:%M:%OS", 
    tz = tz))) || all(!is.na(strptime(xx, f <- "%Y-%m-%d %H:%M", 
    tz = tz))) || all(!is.na(strptime(xx, f <- "%Y/%m/%d %H:%M", 
    tz = tz))) || all(!is.na(strptime(xx, f <- "%Y-%m-%d", 
    tz = tz))) || all(!is.na(strptime(xx, f <- "%Y/%m/%d", 
    tz = tz)))) {

但是,唯一适用的测试是检查NA和IIRC还有NA可以在POSIXlt数据中出现的其他方式。最可能的罪魁祸首是您或您的计算机正在运行的时区中不存在的日期时间。想想日光节约时间等,或日历从来没有存在于日历和时间的系统的各种变幻莫测。

您已识别出错误或导致问题的行。去看看这些数据是什么样的。它们的格式是否正确?如果是,那么日期/时间对您的时区有意义吗?您可能需要自己检查一下这个问题,无论您的计算机在哪里运行都认为它正在运行。