Продолжение цикла при появлении сообщения об ошибке в R - PullRequest
0 голосов
/ 27 октября 2019

У меня большой набор данных, в котором мне нужно выполнить оценку NLS для различных сегментов данных.

Я хочу выполнить циклическое преобразование данных, но указанную мной функцию NLS иногда создает и выдает ошибку (чтологично, когда вы смотрите на данные).

Однако, есть ли способ просто двигаться дальше, если NLS выдает ошибку? (или указать другую функцию, если первая функция слишком сложная?)

Ответы [ 2 ]

1 голос
/ 27 октября 2019

Возможно, вы захотите посмотреть на purrr оболочки для захвата побочных эффектов .

Пример сбойного цикла:

for(x in list(10, "a", 1)) {
  res <- log(x)
  print(res)
}

#> x =  10 ; result:  2.302585 
#> Error in log(x) : non-numeric argument to mathematical function

Цикл перемещается дальше:

library(purrr)
possibly_log <- possibly(log, otherwise = NA)

for(x in list(10, "a", 1)) {
  res <- possibly_log(x)
  cat("x = ", x, "; result: ", res, "\n")
}

#> x =  10 ; result:  2.302585 
#> x =  a ; result:  NA 
#> x =  1 ; result:  0 
1 голос
/ 27 октября 2019

Простой пример продолжения цикла, несмотря на ошибку в цикле, использует try и catch, как показано ниже:

for (i in 1:10) {
  tryCatch({
    print(i)
    if (i==7) stop("Error, but continue!")
  }, error=function(e){cat("ERROR :",conditionMessage(e), "\n")})
}

Выход

[1] 1
[1] 2
[1] 3
[1] 4
[1] 5
[1] 6
[1] 7
ERROR : Error, but continue! 
[1] 8
[1] 9
[1] 10
...