以下示例不执行所需操作。也就是说,出错时循环不会重新启动,而是运行1000
(或提供长度)并停止。我需要它重新启动每个10sec
并从错误开始重新开始计算。
这是片段:
get_daydata <- function(n){
message(paste("remaining runs", n))
withRestarts(err <- tryCatch({ for(i in seq_along(he)){
#.... some calculation .....
}},error=function(e) { invokeRestart("rerun") }),
rerun = function() { message ("re-running"); stopifnot(n > 0);
for(i in 1:10) { Sys.sleep(1); cat(i) }; getdata(n-1) })}
get_daydata(1000)
答案 0 :(得分:1)
这个怎么样?我保存原始n,然后在错误
时将内部n重置为orig_nget_daydata <- function(n) {
orig_n <- n
message(paste("remaining runs", n))
withRestarts(
err <- tryCatch({
for (i in seq_along(he)) {
#.... some calculation .....
}
}, error = function(e) {
n <<- orig_n + 1
invokeRestart("rerun")
}),
rerun = function() {
message ("re-running")
stopifnot(n > 0)
for (i in 1:2) {
Sys.sleep(1)
cat(i)
}
get_daydata(n - 1)
}
)
}
get_daydata(1000)