Я пытаюсь написать function
, который будет повторяться с определенной задержкой (только один раз в моем примере, лучше будет дважды с другой задержкой), если он выдаст ошибку.Если функция не работает после 2 попыток, она должна вернуть NA
.read.csv
это просто пример для иллюстрации, в моих реальных данных это функция очистки.
Этот пост был несколько полезен с использованием tryCatch с Sys.sleep при обнаружении ошибки .Однако я не понял, как реализовать несколько попыток.
Мой подход:
muhur <- function(x){if (is.na(try_catch({read.csv(x)},
.w=function(w){message("error1")},
.e=function(e){return(NA_character_)})))
{message("warning, delay 10 s")
Sys.sleep(10)
try_catch({read.csv(x)},
.w=function(w){message("error2")},
.e=function(e){return(NA_character_)})}
else {try_catch({read.csv(x)},
.w=function(w)message("error3"),
.e=function(e)return(NA_character_))}
}
Моя проблема:
Мой подход довольно трудоемкий и не выдает первое сообщение об ошибке.Более того, я не знаю, как осуществить вторую попытку.
test<- data.frame(a=c("test1","test"))
test%>% group_by(a) %>% mutate(b=muhur(a))
warning, delay 10 s
warning, delay 10 s
# A tibble: 2 x 2
# Groups: a [2]
a b
<fct> <chr>
1 test1 <NA>
2 test <NA>
Мой вопрос:
Есть ли какой-нибудь лучший (более надежный, более ясный) подход к моей проблеме?