Learn R Programming

NCmisc (version 1.2.0)

loop.tracker: Creates a progess bar within a loop

Description

Only requires a single line within a loop to run, in contrast with the built-in tracker which requires a line to initialise, and a line to close. Also has option to backup objects during long loops. Ideal for a loop with a counter such as a for loop. Tracks progress as either percentage of time remaining or by intermittently displaying the estimated number of minutes to go

Usage

loop.tracker(
  cc,
  max,
  st.time = NULL,
  sav.obj = NULL,
  sav.fn = NA,
  sav.freq = 10,
  unit = c("m", "s", "h")[1]
)

Value

returns nothing, simply prints progress to the console

Arguments

cc

integer, current value of the loop counter

max

integer, final value of the loop counter

st.time

'start time' when using 'time to go' mode, taken from a call to proc.time()

sav.obj

optionally an object to backup during the course of a very long loop, to restore in the event of a crash.

sav.fn

the file name to save 'save.obj'

sav.freq

how often to update 'sav.obj' to file, in terms of percentage of run-time

unit

time units h/m/s if using 'time to go' mode

Author

Nicholas Cooper njcooper@gmx.co.uk

Examples

Run this code
# simple example with a for-loop
max <- 100; for (cc in 1:max) { loop.tracker(cc,max); wait(0.004,"s") }
#example using the 'time to go' with a while loop
cc <- 0; max <- 10; start <- proc.time()
while(cc < max) { cc <- cc + 1; wait(0.05,"s"); loop.tracker(cc,max,start,unit="s") }
# example with saving an object, and restoring after a crash
X <- matrix(rnorm(5000),nrow=50); max <- nrow(X); sums <- numeric(max)
for (cc in 1:max) { 
  sums[cc] <- sum(X[cc,])
  wait(.05) # just so this trivial loop doesn't finish so quickly
  loop.tracker(cc,max, sav.obj=sums, sav.fn="temp.rda", sav.freq=5);
  if(cc==29) { warning("faked a crash at iteration 29!"); rm(sums); break }
}
cat("\nloaded latest backup from iteration 28:",paste(load("temp.rda")),"\n")
print(sav.obj); unlink("temp.rda")

Run the code above in your browser using DataLab