错误时重启for循环

时间:2017-02-27 19:46:14

标签: r

以下示例不执行所需操作。也就是说,出错时循环不会重新启动,而是运行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)

1 个答案:

答案 0 :(得分:1)

这个怎么样?我保存原始n,然后在错误

时将内部n重置为orig_n
get_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)