Parsing and Evaluation Tools that Provide More Details than the Default

Parsing and evaluation tools that make it easy to recreate the command line behaviour of R.


Version 0.13

  • Errors generated by try() are now part of the output (for R >= 3.4). To achieve this, the try.outFile option is set for the duration of all evaluations (thanks, @krlmlr, #91)

Version 0.12

  • Removed the stringr dependency (thanks, @mllg, #90).

Version 0.11

  • Fix for regression introduced in 0.10.1 in (fixes #77)

  • evaluate() now respects options(warn >= 2); all warnings are turned into errors (#81)

Version 0.10.1

  • Added method to use the original source for evaluating call objects (because base::deparse() breaks non-ascii source code) (fixes #74)

Version 0.10

  • Added option for the evaluate function to include timing information of ran commands. This information will be subsequently rendered by the replay. Example usage: evaluate::replay(evaluate::evaluate('Sys.sleep(1)', include_timing = TRUE))

  • Added a new function flush_console() to emulate flush.console() in evaluate() (#61).

  • Added a inject_funs() function to create functions in the environment passed to the envir argument of evaluate().

Version 0.9

  • Added an argument allow_error to parse_all() to allow syntactical errors in R source code when allow_error = TRUE; this means evaluate(stop_on_error = 0 or 1) will no longer stop on syntactical errors but returns a list of source code and the error object instead. This can be useful to show syntactical errors for pedagogical purposes.

Version 0.8.3

  • Added an argument filename to evaluate() and parse_all() (thanks, @flying-sheep, #58).

Version 0.8

  • Changed package license to MIT.

Version 0.7.2

  • replay() fails to replay certain objects such as NULL (#53).

Version 0.7

  • R 3.0.2 is the minimal required version for this package now.

Version 0.6

  • Plots are no longer recorded when the current graphical device has been changed, which may introduce issues like yihui/knitr#824.

  • parse_all() can parse R code that contains multibyte characters correctly now (#49, yihui/knitr#988)

Version 0.5.5

  • Actually use the text and graphics in new_output_handler

  • Multiple expressions separated by ; on the same line can be printed as expected when the result returned is visible, e.g. both x and y will be printed when the source code is x; y. In previous versions, only y is printed. (thanks, Bill Venables)

Version 0.5.3


Version 0.5.1


  • under R 2.15.x, evaluate() was unable to filter out the plots triggered by clip() (thanks, Uwe Ligges)

Version 0.5


  • evaluate() is better at telling if a new plot should render a new page due to the new par('page') in R 3.0.2


  • fixed yihui/knitr#600: when the last expression in the code is a comment, the previous incomplete plot was not captured

  • the empty plots produced by strwidth(), strheight(), and clip() are no longer recorded


  • evaluate() no longer records warnings in case of options(warn = -1); see yihui/knitr#610

  • for 'output_handler' in evaluate(), visible values from the 'value' handler will be saved to the output list; this makes it possible for users to save the original values instead of their printed side effects; this change will not affect those who use the default output handlers (#40, thanks, Gabriel Becker)

  • the 'value' handler in new_output_handler() may take an additional argument that means if the value is visible or not; this makes it possible to save the invisible values as well (#41, thanks, Joroen Ooms)

Version 0.4.7


  • added two arguments keep_warning and keep_message in evaluate() so that it is possible not to capture warnings or messages now


  • fixed #25: plots can be correctly recorded under a complex layout now (#25, thanks, Jack Tanner and Andy Barbour)

  • fixed yihui/knitr#582: evaluate() misclassified some plot changes as "par changes" and removed some plots when it should not; now it is better at identifying plot changes dur to par() (thanks, Keith Twombley)

Version 0.4.4


  • Perspective plots from persp() are captured now (thanks to Harvey Lime and Yihui Xie)

  • If an error occurs during printing a visible value, evaluate will halt on a cryptic error "operator is invalid for atomic vectors" (#26, fixed by Yihui Xie)

  • If the internal connection was accidentally closed by the user, a more informative message will show up (#23)

  • Now the graphical device will always try to record graphics by default (when new_device = TRUE) (#34)

  • Some empty and incomplete plots caused by par() or layout() will be filtered out correctly for R 3.0 (#35)


  • Yihui Xie is the new maintainer of this package now

Version 0.4.3


  • Added output_handler argument to evaluate. Should be a output_handler object, which is a list of functions for handling each type of result, prior to printing of visible return values. This allows clients to override the console-like printing of values, while still processing them in the correct temporal context. The other handlers are necessary to convey the correct ordering of the output. This essentially provides stream-based processing, as an alternative to the existing deferred processing.

  • New option, stop_on_error which controls behaviour when errors occur. The default value, 0, acts like you've copied and pasted the code into the console, and continues to execute all code. 1 will stop the code execution and return the results of evaluation up to that point, and 2 will raise an error.


  • Compound expressions like x <- 10; x are now evaluated completely.

  • Chinese characters on windows now work correctly (thanks to Yihui Xie)

  • Graphics and output interleaved correctly when generated from a loop or other compound statements

  • By default, evaluate will now open a new graphics device and clean it up afterwards. To suppress that behaviour use new_device = FALSE

  • use show to display S4 objects.

Version 0.4.2

  • replace deprecated .Internal(eval.with.vis) with correct withVisible

  • evaluate gains debug argument

Version 0.4.1

  • use test_package to avoid problems with latest version of testthat

evaluate 0.4 (2011-11-03)

  • Use plot hooks to capture multiple plots created in a loop or within a function. (Contributed by Yihui Xie)

evaluate 0.3

  • Import stringr instead of depending on it.

  • Test plot recording only in the presence of interactive devices.

evaluate 0.2

  • try_capture_stack and create_traceback do a much better job of removing infrastructure calls from the captured traceback

  • visible results are automatically evaluated and their outputs are captured. This is particularly important for lattice and ggplot graphics, which otherwise require special handling. It also correctly captures warnings, errors and messages raised by the print method.

Reference manual

It appears you don't have a PDF plugin for this browser. You can click here to download the reference manual.


0.14 by Yihui Xie, a year ago

Report a bug at

Browse source code at

Authors: Hadley Wickham [aut] , Yihui Xie [aut, cre] , Michael Lawrence [ctb] , Thomas Kluyver [ctb] , Jeroen Ooms [ctb] , Barret Schloerke [ctb] , Adam Ryczkowski [ctb] , Hiroaki Yutani [ctb] , Michel Lang [ctb] , Karolis Koncevičius [ctb]

Documentation:   PDF Manual  

MIT + file LICENSE license

Imports methods

Suggests testthat, lattice, ggplot2

Imported by IRkernel, flair, histry, jmvconnect, knitr, learnr, opencpu, pkgdown, portfolioBacktest, rmarkdown, testthat.

Suggested by IAbin, Jaya, mlr3, mlr3misc, mlr3pipelines, tibble, tikzDevice.

See at CRAN