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 ...)