2011-12-14 204 views
0

試圖使用quantmod使用循環分析大量庫存。問題是我不知道如果雅虎有我需要的所有股票數據,所以我試圖編程R跳過錯誤,當它無法下載,但我似乎無法關閉警告消息。通常庫啓動後,我這樣做,並得到:quantmod覆蓋警告消息

> options(show.error.messages = FALSE) 
> getSymbols("gewg", warnings = FALSE) 
Warning message: 
In download.file(paste(yahoo.URL, "s=", Symbols.name, "&a=", from.m, : 
    cannot open: HTTP status was '404 Not Found'` 

任何想法爲什麼會發生這種情況?

編輯: 我已經包含了我用來測試它的代碼,並且只能看到注1顯示出來而NOTE2沒有出現。我用a2中的一個工作報告器試了一下,並且NOTE1和NOTE2都出現了。

> tester2 <- function(){ 
+ tester <- function() { 
+ a <- getSymbols("GOOG", auto.assign = FALSE) 
+ cat("NOTE1") 
+ a2 <- getSymbols("JWEGOWN", auto.assign = FALSE) 
+ cat("NOTE2") 
+ a3 <- getSymbols("GS", auto.assign = FALSE) 
+ return(a3) 
+ } 
+ return(try(tester(), TRUE)) 
+ } 
> af <- tester2() 
NOTE1Warning message: 
In download.file(paste(yahoo.URL, "s=", Symbols.name, "&a=", from.m, : 
    cannot open: HTTP status was '404 Not Found' 
> 
+0

該腳本僅生成警告,因此它不應該崩潰。你確切的問題是什麼? –

+0

基本上我試圖在使用循環的股票列表上運行測試,並且每次我在股票代碼上運行getSymbol()時,雅虎沒有數據會停止循環並給我這個消息。這就是爲什麼我試圖找到一種方法來覆蓋它。 – user1097485

+0

哦,我關掉了錯誤信息,否則有一個錯誤,說類似於:「download.file中的錯誤(粘貼(yahoo.URL,」s =「 ,Symbols.name,「&a =」,from.m,: 無法打開URL'http://chart.yahoo.com/table.csv?s=gewg&a=0&b=01&c=2007&d=11&e=14&f=2011&g= d&q = q&y = 0&z = gewg&x = .csv'「 – user1097485

回答

1

做這種事情的標準方法是使用try。這看起來是這樣的(例如從try的文檔):

set.seed(123) 
x <- stats::rnorm(50) 
doit <- function(x) 
{ 
    x <- sample(x, replace=TRUE) 
    if(length(unique(x)) > 30) mean(x) 
    else stop("too few unique points") 
} 
## alternative 1 
res <- lapply(1:100, function(i) try(doit(x), TRUE)) 

res結果現在顯示任一正常輸出,或try-error類的對象。結合該列表是可以做到用:

# Replace the errors by `NULL` 
res2 = lapply(res, 
    function(x) 
    if(!inherits(x, "try-error")) 
     return(x) 
    else 
     return(NULL)) 
resfinal = do.call("c", res2) 

resfinal現在是隻沒有失敗的結果的列表。

+0

我一直在尋找使用try ,但我不確定它是否適合我的情況,因爲處理空數據不是問題。 但是,相反,我需要重寫錯誤消息,以便我的循環獲取數據可以繼續運行,即使其中一些失敗 – user1097485

+0

嘗試是專門爲此:覆蓋錯誤消息。 –

+0

嗯我嘗試使用後,你提到它,但它仍然停止中途迴路。是否可能是因爲函數「getSymbols()」中有某種編碼沒有響應try? – user1097485