Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to interrupt at loop end

Tags:

r

How can I write a loop in R so that if I press esc it stops not in the middle but at the end of the loop? So to say I want to define points where it is safe to interrupt the loop.

I am running an iteration with a plot every second. If the visual results don't develop in the right direction, I want to be able to interrupt the iteration, tweak some parameters and continue the iteration. Now I am doing this by pressing esc or the stop button in the GUI. But this corrupts some data, because the interrupt takes place in the middle of a calculation. So I am not able to continue the iteration.

like image 988
nnn Avatar asked Jun 08 '26 13:06

nnn


1 Answers

Here is an option using withRestarts and hijacking the "abort" restart. Try running the code and hitting "ESC" while the loop is going:

# 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")
}

Just keep in mind this will prevent you from truly exiting the loop short of sending a kill command to R.

like image 135
BrodieG Avatar answered Jun 11 '26 23:06

BrodieG



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!