Просто используйте 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)
. Если он работает правильно, цикл завершается. Если нет, то он продолжает пытаться.