Evaluate an R expression and captures the output
Evaluate an R expression and captures the output.
captureOutput(expr, file=NULL, append=FALSE, collapse=NULL, envir=parent.frame())
expr |
The R expression to be evaluated. |
file |
A file name or a |
append |
If |
collapse |
A |
envir |
The |
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].
Henrik Bengtsson
[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/
Internally, eval
() is used to evaluate the expression.
and capture.output
to capture the output.
# 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 ...)
Please choose more modern alternatives, such as Google Chrome or Mozilla Firefox.