2011-12-14 2 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()을 실행할 때마다 루프를 멈추고이 메시지를 전달합니다. 그게 내가 그것을 무시할 수있는 방법을 찾으려고 노력하고있는 이유 다. – 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의 문서에서 예)과 같이 보일 것입니다 :

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

try는 특별히 다음을 의미합니다. –

+0

흠 나는 당신이 그것을 언급 한 후에 시도해 보았지만 여전히 루프 중간에 멈춘다. try에 응답하지 않는 "getSymbols()"함수 내에 코딩이 있기 때문에 그럴 수 있습니까? – user1097485

관련 문제