R - игнорировать ошибку при предупреждении в определенных сценариях, получить результаты - PullRequest
5 голосов
/ 21 апреля 2011

Я установил параметры (warn = 2).Мне нужно знать о предупреждении при срабатывании и предпочитаю прекратить выполнение.Тем не менее, в некоторых случаях ожидается предупреждение, и программа должна продолжить выполнение.Использование tryCatch () корректно перехватывает ошибку, однако полученные данные недоступны.

Вот конкретный пример:

x = c(1,2,3,4,5,6)
y = c(1,1,1,0,0,0)
result = glm( y~x , family = binomial( link = "logit" ) )

Оборачивание glm в tryCatch (), результат не заполняется,Это имеет смысл, поскольку предупреждение glm преобразуется в ошибку до того, как оно сможет вернуться.Есть ли лучшая практика в этом сценарии?Это просто установить опции (warn = 0) перед вызовом glm и затем восстановить после вызова?Или есть лучший образец?

Я уверен, что это то, что я хочу сделать.Там нет стандарта для предупреждений.Иногда предупреждение тривиально, а иногда - довольно серьезно.Вот почему я конвертирую предупреждения в ошибки по умолчанию.Тем не менее, мне нужна способность игнорировать предупреждения в определенных ситуациях, когда я абсолютно уверен, что могу игнорировать предупреждение.В этих случаях я хочу получить результат!

Редактировать
Вот пример:

tryCatch(  { result = glm( y~x , family = binomial( link = "logit" ) ) } , error = function(e) { print("test") } )

1 Ответ

8 голосов
/ 21 апреля 2011

Попробуйте suppressWarnings()

http://stat.ethz.ch/R-manual/R-patched/library/base/html/warning.html

 x = c(1,2,3,4,5,6)
 y = c(1,1,1,0,0,0)
 result = suppressWarnings(glm( y~x , family = binomial( link = "logit" ) ))
 result

 Call:  glm(formula = y ~ x, family = binomial(link = "logit"))

 Coefficients:
 (Intercept)            x  
      165.32       -47.23  

 Degrees of Freedom: 5 Total (i.e. Null);  4 Residual
 Null Deviance:      8.318 
 Residual Deviance: 2.215e-10    AIC: 4 

Изменить 1 ==================================

Если вы хотите показать ошибку из вышеприведенного оператора glm() где-нибудь позже в своем коде, вы можете добавить оператор warnings().

 stoerr <- warnings()   
 stoerr

 Warning message:
 glm.fit: fitted probabilities numerically 0 or 1 occurred
...