splot.bench: splot benchmarker

View source: R/splot.bench.R

splot.benchR Documentation

splot benchmarker

Description

Time one or more expressions over several iteration, then plot the distributions of their times.

Usage

splot.bench(..., runs = 20, runsize = 200, cleanup = FALSE,
  print.names = FALSE, limit.outliers = TRUE, check_output = TRUE,
  check_args = list(), options = list())

Arguments

...

accepts any number of expressions to be timed. See examples.

runs

the number of overall iterations. Increase to stabilize estimates.

runsize

the number of times each expression is evaluated within each run. Increase to differentiate estimates (particularly for very fast operations).

cleanup

logical; if TRUE, garbage collection will be performed before each run. Garbage collection greatly increases run time, but may result in more stable timings.

print.names

logical; if FALSE, the entered expressions will be included in the plot as legend names. Otherwise, (and if the number of expressions is over 5 or the length of any expression is over 50 characters) expressions are replaced with numbers corresponding to their entered position.

limit.outliers

logical; if TRUE (default), times over an upper bound for the given expression will be set to that upper bound, removing aberrant extremes.

check_output

logical; if TRUE, the output of each expression is checked with all.equal against that of the first. A warning indicates if any are not equal, and results are invisibly returned.

check_args

a list of arguments to be passed to all.equal, if check_output is TRUE.

options

a list of options to pass on to splot.

Value

A list:

plot splot output
checks a list of result from all.equal, if check_output was TRUE
expressions a list of the entered expressions
summary a matrix of the printed results

Examples

# increase the number of runs for more stable estimates

# compare ways of looping through a vector
splot.bench(
  sapply(1:100, "*", 10),
  mapply("*", 1:100, 10),
  vapply(1:100, "*", 0, 10),
  unlist(lapply(1:100, "*", 10)),
  runs = 20, runsize = 200
)

# compare ways of setting all but the maximum value of each row in a matrix to 0


mat <- matrix(c(rep(1, 4), rep(0, 8)), 4, 3)
splot.bench(
  t(vapply(seq_len(4), function(r) {
    mat[r, mat[r, ] < max(mat[r, ])] <- 0
    mat[r, ]
  }, numeric(ncol(mat)))),
  do.call(rbind, lapply(seq_len(4), function(r) {
    mat[r, mat[r, ] < max(mat[r, ])] <- 0
    mat[r, ]
  })),
  do.call(rbind, lapply(seq_len(4), function(r) {
    nr <- mat[r, ]
    nr[nr < max(nr)] <- 0
    nr
  })),
  {
    nm <- mat
    for (r in seq_len(4)) {
      nr <- nm[r, ]
      nm[r, nr < max(nr)] <- 0
    }
    nm
  },
  {
    nm <- mat
    for (r in seq_len(4)) nm[r, nm[r, ] < max(nm[r, ])] <- 0
    nm
  },
  {
    nm <- matrix(0, dim(mat)[1], dim(mat)[2])
    for (r in seq_len(4)) {
      m <- which.max(mat[r, ])
      nm[r, m] <- mat[r, m]
    }
    nm
  },
  {
    ck <- do.call(rbind, lapply(seq_len(4), function(r) {
      nr <- mat[r, ]
      nr < max(nr)
    }))
    nm <- mat
    nm[ck] <- 0
    nm
  },
  t(apply(mat, 1, function(r) {
    r[r < max(r)] <- 0
    r
  })),
  runs = 50,
  runsize = 200
)


splot documentation built on Nov. 2, 2023, 6:02 p.m.