我们有一个基本的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()
调用一定秒数的原因。