| tic and toc | Package tictoc | R Documentation |
tic - Starts the timer and stores the start time and
the message on the stack.
toc - Notes the current timer and computes elapsed
time since the matching call to tic(). When
quiet is FALSE, prints the associated message
and the elapsed time.
toc.outmsg - Formats a message for pretty printing.
Redefine this for different formatting.
tic.clearlog - Clears the tic/toc log.
tic.clear - Clears the tic/toc stack. This could be
useful in cases when because of an error the closing toc()
calls never get executed.
tic.log - Returns log messages from calls to tic/toc
since the last call to tic.clearlog.
tic(msg = NULL, quiet = TRUE, func.tic = NULL, ...) toc(log = FALSE, quiet = FALSE, func.toc = toc.outmsg, ...) toc.outmsg(tic, toc, msg) tic.clearlog() tic.clear() tic.log(format = TRUE)
msg |
- a text string associated with the timer. It
gets printed on a call to |
func.tic |
Function producing the formatted message
with a signature |
... |
The other parameters that are passed to
|
log |
- When |
quiet |
When |
func.toc |
Function producing the formatted message
with a signature |
tic |
Time from the call to tic()
( |
toc |
Time from the call to toc()
( |
format |
When true, |
tic returns the timestamp (invisible).
toc returns an (invisible) list containing the
timestamps tic, toc, and the message
msg.
toc.outmsg returns formatted message.
tic.log returns a list of formatted messages
(format = TRUE) or a list of lists containing the
timestamps and unformatted messages from prior calls to
tic/toc.
## Not run:
## Basic use case
tic()
print("Do something...")
Sys.sleep(1)
toc()
# 1.034 sec elapsed
## Inline timing example, similar to system.time()
tic(); for(i in 1:1000000) { j = i / 2 }; toc()
# 0.527 sec elapsed
## Timing multiple steps
tic("step 1")
print("Do something...")
Sys.sleep(1)
toc()
# step 1: 1.005 sec elapsed
tic("step 2")
print("Do something...")
Sys.sleep(1)
toc()
# step 2: 1.004 sec elapsed
## Timing nested code
tic("outer")
Sys.sleep(1)
tic("middle")
Sys.sleep(2)
tic("inner")
Sys.sleep(3)
toc()
# inner: 3.004 sec elapsed
toc()
# middle: 5.008 sec elapsed
toc()
# outer: 6.016 sec elapsed
## Timing in a loop and analyzing the results later using tic.log().
tic.clearlog()
for (x in 1:10)
{
tic(x)
Sys.sleep(1)
toc(log = TRUE, quiet = TRUE)
}
log.txt <- tic.log(format = TRUE)
log.lst <- tic.log(format = FALSE)
tic.clearlog()
timings <- unlist(lapply(log.lst, function(x) x$toc - x$tic))
mean(timings)
# [1] 1.001
writeLines(unlist(log.txt))
# 1: 1.002 sec elapsed
# 2: 1 sec elapsed
# 3: 1.002 sec elapsed
# 4: 1.001 sec elapsed
# 5: 1.001 sec elapsed
# 6: 1.001 sec elapsed
# 7: 1.001 sec elapsed
# 8: 1.001 sec elapsed
# 9: 1.001 sec elapsed
# 10: 1 sec elapsed
## Using custom callbacks in tic/toc
my.msg.tic <- function(tic, msg)
{
if (is.null(msg) || is.na(msg) || length(msg) == 0)
{
outmsg <- paste(round(toc - tic, 3), " seconds elapsed", sep="")
}
else
{
outmsg <- paste("Starting ", msg, "...", sep="")
}
}
my.msg.toc <- function(tic, toc, msg, info)
{
if (is.null(msg) || is.na(msg) || length(msg) == 0)
{
outmsg <- paste(round(toc - tic, 3), " seconds elapsed", sep="")
}
else
{
outmsg <- paste(info, ": ", msg, ": ",
round(toc - tic, 3), " seconds elapsed", sep="")
}
}
tic("outer", quiet = FALSE, func.tic = my.msg.tic)
# Starting outer...
Sys.sleep(1)
tic("middle", quiet = FALSE, func.tic = my.msg.tic)
# Starting middle...
Sys.sleep(2)
tic("inner", quiet = FALSE, func.tic = my.msg.tic)
Sys.sleep(3)
# Starting inner...
toc(quiet = FALSE, func.toc = my.msg.toc, info = "INFO")
# INFO: inner: 3.005 seconds elapsed
toc(quiet = FALSE, func.toc = my.msg.toc, info = "INFO")
# INFO: middle: 5.01 seconds elapsed
toc(quiet = FALSE, func.toc = my.msg.toc, info = "INFO")
# INFO: outer: 6.014 seconds elapsed
## End(Not run)