0

quantmod を使用して、ループを使用して大量の株式を分析しようとしています。問題は、ヤフーに必要なすべての在庫データがあるかどうかわからないため、ダウンロードに失敗したときにエラーをスキップするように R をプログラムしようとしたのですが、警告メッセージをオフにできないようです。通常のライブラリの起動後、これを実行して取得します:

> 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'`

なぜこれが起こっているのですか?

編集: テストに使用したコードを含めました。見られるように、NOTE1 のみが表示され、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'
> 
4

1 に答える 1

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、通常の出力または class のオブジェクトのいずれかを表示するようになりました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失敗しなかった結果のみのリストになりました。

于 2011-12-14T10:27:05.303 に答える