2

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

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))

以前有人遇到过这种现象吗?这可能是什么解释?感谢您花时间阅读并可能回答这个问题!

4

1 回答 1

3

当字符数据被强制转换为对象(即 R 可以理解为日期时间而不仅仅是字符串的东西)时,错误来自as.POSIXlt.character哪个方法调用。POSIXlt

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

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)))) {

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

您已经确定了错误或导致问题的行。去看看那些数据是什么样子的。它们的格式是否正确?如果是,日期/时间对您的时区有意义吗?您可能需要自己对此进行一些检查,以了解您的计算碰巧认为它正在运行的位置。

于 2012-11-12T17:52:56.950 回答