如何在R中编写一个循环,这样如果我按esc
,它不会停在中间但是在循环结束时停止?所以说我想定义可以安全地中断循环的点。
我正在每秒运行一次迭代。如果视觉结果没有朝正确的方向发展,我希望能够中断迭代,调整一些参数并继续迭代。现在我按下esc
或GUI中的停止按钮来执行此操作。但这会破坏一些数据,因为中断发生在计算过程中。所以我无法继续迭代。
答案 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命令时真正退出循环。