| captureOutput {R.utils} | R Documentation | 
Evaluate an R expression and captures the output
Description
Evaluate an R expression and captures the output.
Usage
captureOutput(expr, file=NULL, append=FALSE, collapse=NULL, envir=parent.frame())
Arguments
| expr | The R expression to be evaluated. | 
| file | A file name or a  | 
| append | If  | 
| collapse | A  | 
| envir | The  | 
Details
This method imitates capture.output with the major
difference that it captures strings via a raw connection rather
than via internal strings.  The latter becomes exponentially slow
for large outputs [1,2].
Value
Returns captured output as a character vector.
Author(s)
Henrik Bengtsson
References
[1] R-devel thread 'capture.output(): Using a rawConnection() [linear] instead of textConnection() [exponential]?', 2014-02-04. https://stat.ethz.ch/pipermail/r-devel/2014-February/068349.html [2] JottR blog post 'PERFORMANCE: captureOutput() is much faster than capture.output()', 2015-05-26. https://www.jottr.org/2014/05/26/captureoutput/
See Also
Internally, eval() is used to evaluate the expression.
and capture.output to capture the output.
Examples
# captureOutput() is much faster than capture.output()
# for large outputs when capturing to a string.
for (n in c(10e3, 20e3, 30e3, 40e3)) {
  printf("n=%d\n", n)
  x <- rnorm(n)
  t0 <- system.time({
    bfr0 <- capture.output(print(x))
  })
  print(t0)
  t1 <- system.time({
    bfr <- captureOutput(print(x))
  })
  print(t1)
  print(t1/t0)
  bfr2n <- captureOutput(print(x), collapse="\n")
  bfr2r <- captureOutput(print(x), collapse="\r")
  stopifnot(identical(bfr, bfr0))
} # for (n ...)