QuantMod перезаписывает предупреждение - PullRequest
0 голосов
/ 14 декабря 2011

Пытался использовать QuantMod для анализа большого количества акций с использованием циклов. Проблема в том, что я не знаю, есть ли у Yahoo все данные о запасах, которые мне нужны, поэтому я пытался запрограммировать 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'`

Есть идеи, почему это происходит?

EDIT: Я включил код, который использовал для его тестирования, и, как видно, только 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'
> 

1 Ответ

1 голос
/ 14 декабря 2011

Стандартный способ сделать это - использовать 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 теперь список только с результатами, которые не прошли.

...