Quantmod отменяет предупреждающее сообщение

Пытался использовать 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'`

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

РЕДАКТИРОВАТЬ: Я включил код, который использовал для его тестирования, и, как видно, отображается только 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'
> 

person user1097485    schedule 14.12.2011    source источник
comment
Сценарий только генерирует предупреждения, поэтому сбой не произойдет. В чем конкретно ваша проблема?   -  person Paul Hiemstra    schedule 14.12.2011
comment
В основном я пытаюсь запустить тесты для списка акций с использованием циклов, и каждый раз, когда я запускаю getSymbol () для символа акций, для которого у yahoo нет данных, он останавливает цикл и дает мне это сообщение. Вот почему я пытаюсь найти способ преодолеть это.   -  person user1097485    schedule 14.12.2011
comment
Да, и я отключил сообщение об ошибке, иначе есть ошибка, которая говорит что-то похожее на: Ошибка в download.file (paste (yahoo.URL, s =, Symbols.name, & a =, from.m,: не удается открыть URL-адрес 'chart.yahoo.com/ '   -  person user1097485    schedule 14.12.2011
comment
Я бы сказал: примите сообщения об ошибках и используйте try (), чтобы отловить ошибки. (см. также мой ответ ниже).   -  person Paul Hiemstra    schedule 14.12.2011


Ответы (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 теперь является списком только с правильными результатами.

person Paul Hiemstra    schedule 14.12.2011
comment
Я тоже искал возможность использовать try, однако я не уверен, подходит ли это моему сценарию на данный момент, поскольку обработка пустых данных не является проблемой. Но вместо этого мне нужно переопределить сообщение об ошибке, чтобы мой цикл выборки данных мог продолжать работать, даже если некоторые из них не работают. - person user1097485; 14.12.2011
comment
try специально предназначен для этого: переопределить сообщение об ошибке. - person Paul Hiemstra; 14.12.2011
comment
хм, я попытался использовать try после того, как вы упомянули об этом, но он все еще останавливает цикл на полпути. могло ли это быть из-за того, что в функции getSymbols () есть какой-то код, который не отвечает на попытку? - person user1097485; 14.12.2011
comment
Без воспроизводимого примера нам трудно точно определить, что идет не так. - person Paul Hiemstra; 14.12.2011
comment
спасибо за помощь, я отредактировал исходное сообщение, включив в него код, о котором я имел в виду. - person user1097485; 14.12.2011