如何在R中多次(N次)尝试捕获同一函数调用



我们有一个基本的tryCatch,它将数据帧写入Google Sheets,如果第一次写入因任何原因失败,则重试:

result = tryCatch({
print('TRYING')
googlesheets4::sheet_write(data = our_df, ss = our_spreadsheet, sheet = 'our_sheetname')
}, error = function(e) {
print('ERROR, TRYING AGAIN')
googlesheets4::sheet_write(data = our_df, ss = our_spreadsheet, sheet = 'our_sheetname')
})

是否可以将此代码概括为重试googlesheets4::sheet_write()函数调用N次?基本R中是否为此内置了一些东西,或者是否有一个好的R库可以处理函数的无限重试?

您可以将其放入这样的for循环中。

首先,我将定义一个经常失败的函数(因为我无法访问您的Google表单(。

russian_roulette <- function(n = 6) {
revolver <- sample(1:n, 1)
if (revolver == 1) {
return("You lived")
} else {
stop("Better luck next time...")
}
}

然后你可以尝试你认为合理的次数。您可以将我对russian_roulette()的呼叫替换为对googlesheets4::sheet_write()的呼叫。

NUM_TRIES <- 10
for (i in 1:NUM_TRIES) {
message(i)
result <- try({
russian_roulette()
})
if (class(result) != "try-error") {
print("Success!")
break
}
}

输出:

1
Error in russian_roulette() : Better luck next time...
2
Error in russian_roulette() : Better luck next time...
3
Error in russian_roulette() : Better luck next time...
4
Error in russian_roulette() : Better luck next time...
5
Error in russian_roulette() : Better luck next time...
6
[1] "Success!"
result
# [1] "You lived"

我不知道为什么你会期望对文件的写入失败——这取决于你可能想在每次失败后在其中添加Sys.sleep()调用一定秒数的原因。

相关内容

  • 没有找到相关文章

最新更新