如何在循环结束时中断

时间:2015-03-06 16:33:58

标签: r

如何在R中编写一个循环,这样如果我按esc,它不会停在中间但是在循环结束时停止?所以说我想定义可以安全地中断循环的点。

我正在每秒运行一次迭代。如果视觉结果没有朝正确的方向发展,我希望能够中断迭代,调整一些参数并继续迭代。现在我按下esc或GUI中的停止按钮来执行此操作。但这会破坏一些数据,因为中断发生在计算过程中。所以我无法继续迭代。

1 个答案:

答案 0 :(得分:2)

这是一个使用withRestarts并劫持" abort"的选项重新开始。尝试运行代码并点击" ESC"循环进行时:

# Make up a task that takes some time

task_to_perform_in_loop <- function() for(i in 1:100) Sys.sleep(0.01)

# Run task in loop
{
  stopAtEnd <- FALSE
  for(i in 1:5) {
    cat("Loop #", i, "\n", sep="")
    withRestarts(
      task_to_perform_in_loop(),
      abort=function(e) {
        message("Will stop when loop complete")
        stopAtEnd <<- TRUE
      }
    )  
  }
  if(stopAtEnd) stop("Stopping After Finishing Loop")  
  cat("Continuing After Finishing Loop")
}

请记住,这会阻止您在向R发送kill命令时真正退出循环。