Повторно выполнить функцию, если она не работает (R) - PullRequest
0 голосов
/ 06 ноября 2018

У меня есть функция f, которая на 95% является гигантским для цикла (специфика функции не имеет значения). Хотя функция работает правильно, иногда она перестает работать (по разным причинам). Из-за замысла f, при повторном выполнении он перезапускается с точки прерывания и продолжает работать должным образом, пока не завершится или не остановится и не должен быть перезапущен снова. Первый подход, очевидно, заключается в том, чтобы «найти и исправить ошибки», что будет сделано в какой-то момент. Однако, тем временем, функция должна давать результаты. У меня вопрос, есть ли способ выполнить его автоматически?

например. (псевдокод)

execute(f)

if(f fails){

execute(f)

} else {}

Когда f наконец-то закончен, мы переходим к другой части кода.

Итак, мой вопрос, это выполнимо? Большое спасибо!

1 Ответ

0 голосов
/ 06 ноября 2018

Просто используйте try. Это стандартная функция R, которая принимает выражение в качестве аргумента и возвращает значение, которое возвращает выражение, если оно выполняется правильно, или объект класса try-error, если произошла ошибка. Например:

a<-try(2+2)
a
#[1] 4
class(a)
#[1] "numeric"
a<-try(2+"")
class(a)
#[1] "try-error"

Как видите, вы можете заключить выражение в try, затем проверить, наследуется ли возвращаемый объект от try-error и решить, что делать в любом случае. В вашем случае вы можете:

repeat {
    tmp<-try(execute(f))
    if (!(inherits(tmp,"try-error"))) 
      break
}

Выше я пытаюсь execute(f). Если он работает правильно, цикл завершается. Если нет, то он продолжает пытаться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...