gpt4 book ai didi

r - 出错时再次循环

转载 作者:行者123 更新时间:2023-12-01 07:53:14 25 4
gpt4 key购买 nike

我试图阅读所有内容,但我有点卡在一个问题上。
通过使用 bigrquery,我创建了对 Google BigQuery 的查询以获取数据 - 不幸的是,有时我的查询由于超时而不起作用。
Q 是一个 SQL-Query,BQ 应该存储从 BigQuery 下载的数据。

有人知道每次 tryCatch 给我一个错误时如何重新执行循环吗?

到目前为止我得到了这个:

BQ_Foo <- NULL
tryCatch(
{
repeat{
BQ_Foo <- query_exec(Q_foo,"bigquery")
if(is.list(BQ_Foo) == TRUE)break }
}
,error=function(e){cat("ERROR : Query not loaded!", "\n")}
)

编辑:

我再次尝试了我的第一种方法,这次我收到了以下错误消息:

Error in curl::curl_fetch_memory(url, handle = handle) :
Operation was aborted by an application callback



有人知道如何处理吗?

最佳答案

广泛基于 r2evans 的回答,这里是如何用 withRestarts 做同样的事情,在 This blog post 的帮助下:

set.seed(2)
foo <- NULL
operation <- function(x,tries) {
message(paste("x is",x,"remaining tries",tries))
withRestarts(
tryCatch({
if (runif(1) < x) stop("fail!") else 1
},
error=function(e) { invokeRestart("retry")}),
retry = function() {
message("Retrying")
stopifnot(tries > 0)
operation(x,tries-1)
}
)
}
> operation(0.9,5)
# x is 0.9 remaining tries 5
# Retrying
# x is 0.9 remaining tries 4
# Retrying
# x is 0.9 remaining tries 3
# Retrying
# x is 0.9 remaining tries 2
# Retrying
# x is 0.9 remaining tries 1
[1] 1

这是一种递归调用,因此您可以在再次调用该函数之前做任何想做的事情。

您可以在 tryCatch 错误处理程序中以相同的方式执行此操作,使用重新启动处理程序的兴趣是调用特定函数,如果您有两个 tryCatch,您想要几乎相同的处理程序行为,那么您可以添加一个参数并使用相同的处理程序对于每个 try catch ,即:
testfun <- function(x) {
withRestarts({
tryCatch(
{
ifelse(runif(1) < 0.5,stop("Error Message"),warning("Warning message"))
},
warning=function(e) { invokeRestart("logger", level="warning", message=e ) },
error=function(e) { invokeRestart("logger", level="error", message=e ) }
)
},
logger = function(level,message) {
message(date()," [",level,"]: ",message[['message']])
}
)
}

给予:
> set.seed(2)
> testfun()
Fri Jul 29 14:15:11 2016 [error]: Error Message
> testfun()
Fri Jul 29 14:15:12 2016 [warning]: Warning message
> testfun()
Fri Jul 29 14:15:13 2016 [warning]: Warning message
> testfun()
Fri Jul 29 14:15:13 2016 [error]: Error Message

这里的主要兴趣是记录器方法的分解并减少代码重复。

关于r - 出错时再次循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38641083/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com