2011-12-14 30 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'` 

なぜこのようなことが起こっているのでしょうか?

EDIT: 私はそれをテストするために使用されるコードが含まれていましたし、のみ注1現れると注2は表示されません見ることができるように。私は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()を実行するたびにyahooはデータを持っていないのでループが止まり、このメッセージが表示されます。それで、私はそれを上書きする方法を見つけようとしているのです。 – user1097485

+0

ああ、私はエラーメッセージをオフにしました。そうでない場合は、次のようなエラーが表示されます。 "download.fileのエラー(paste(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= – user1097485

答えて

1

標準的な方法は、tryを使用することです。これは、(tryのドキュメントからの例)のようになります。res

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

結果は、今通常の出力、またはクラス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

tryは特にこれを意味します:エラーメッセージを無効にします。 –

+0

ええ、私はあなたがそれを言及した後に試してみましたが、まだ途中でループを停止します。それは試行に応答しない関数 "getSymbols()"内に何らかのコーディングがあるためでしょうか? – user1097485

関連する問題