2012-11-12 66 views
2

我的R版本是2.15.1我正在關注Luis Torgo的「預測股市回報」案例研究。當我嘗試從CSV文件或Web兩種方法都失敗,xts錯誤 - 幫助解釋行爲,請

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

以前有沒有人遇到過這種現象?這可能是什麼解釋? 感謝您的閱讀時間,並可能回答此問題!

回答

3

錯誤來自as.POSIXlt.character這是當字符數據被強制爲POSIXlt對象(即R可以理解爲日期時間而不僅僅是字符串)時調用的方法。

它的意思是,你的datetime數據載體沒有被記錄在被識別爲標準的datetime格式的格式:

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數據中出現的其他方式。最有可能的罪魁禍首是您或您的計算機運行的時區中不存在的日期時間。考慮日光節約時間等或日曆,從來沒有存在的日曆和時間系統的各種變幻莫測的。

您確定了錯誤或導致問題的行。去看看這些數據是什麼樣子。他們的格式是否正確?如果是,那麼日期/時間對您的時區有意義嗎?你可能需要自己檢查一下,看看你的計算是否認爲它正在運行。

+1

謝謝加文,你說得對,問題出在時區。我的系統時區是_'CST'_。更改爲_'GMT'_後,它無需刪除2行就可以工作。導致問題的行包含這些日期:_'1974-04-01'_和_'1975-04-01'_。爲什麼這兩個日期可能會導致_'CST'_中的問題,而不是_'GMT'_格式? –

+0

http://www.horlogeparlante.com/history.html?city=1668341指出這兩個日期的夏令時更改。這只是一半的解釋,但我想它是相關的。 –

+0

感謝您的鏈接,Darren! –