defer() and all local_*() functions now work when run inside of a .Rmd. The deferred expressions are executed when knitr exits.
defer() and local_ functions now work within source(). The deferred expressions are executed when source() exits.
with_() and local_() gain a get argument. Supply a getter function to create with and local functions that are robust to early exits.
When supplied, this restoration pattern is used:
old <- get()
on.exit(set(old))
set(new)
action()
Instead of:
old <- set(new)
on.exit(set(old))
action()
This ensures proper restoration of the old state when an early exit occurs during set() (for instance when a deprecation warning is caught, see #191).
These with_ and local_ functions are now robust to early exits (see next bullet):
_locale()_envvar()_libpaths()_options()_par()_path()_seed()with_namespace() and local_namespace() now pass warn.conflicts to attach() (@kyleam, #185).
local_rng_version() and local_seed() no longer warn when restoring sample.kind to "Rounding" (#167).
with_seed() now preserves the current values of RNGkind() (#167).
with_collate() is no longer affected by the LC_COLLATE environment variable set to “C” (#179).
Local evaluations in the globalenv() (as opposed to top-level ones) are now unwound in the same way as regular environments.
local_tempfile() gains a lines argument so, if desired, you can pre-fill the temporary file with some data.
Lionel Henry is the new maintainer.
Handlers registered with the global environment (as happens when local_() is run at the top-level, outside a function) are now automatically run when the R session ends (#173).
New with_language() and local_language() to temporarily control the language used for translations (#180).
with_seed() now caches the check for R version, so is now faster (#170)
with_makevars() and local_makevars() now eagerly evaluate the path argument (#169)
local_options() now lets you set an option to NULL as intended (#156)
local_tempfile() argument envir is deprecated, in favor of .local_envir. All withr functions except local_tempfile() used .local_envir to specify environments, so this makes this function consistent with the rest. (#157)
with_environment() now passing pos and warn.conflicts to attach(), as intended (#161).
with_seed() now also sets the RNG via new arguments .rng_kind, .rng_normal_kind and .rng_sample_kind (#162, @AshesITR).
with_timezone() now works after recent changes to Sys.timezone() in R-devel (#165)
capabilities("cairo") are now skipped.withr is now licensed as MIT (#154).
Tests for with_cairo_pdf() and with_cairo_ps() have been removed, as they fail if Cairo is not available, such as with M1 macOS systems (#158)
local_seed() is now exported (#153)
local_tempfile() argument new is deprecated, in favor of returning the path to the new tempfile. calls like local_tempfile("xyz") should be replaced with xyx <- local_tempfile() in your code (#141).New local_seed() function and local_preserve_seed() functions to correspond to with_seed() and with_preserve_seed() (#139).
New local_tempdir() function added to create a temp directory (#140)
local_*() functions now take dots (...), which can simplify calls in some cases, e.g. you can now use local_options(foo = "bar") rather than local_options(c(foo = "bar")).
defer() now throws an error if an error occurs in the deferred expression (#148)
with_file() and local_file() can now work if the file is actually a directory (#144).
defer() can set deferred events on .GlobalEnv to facilitate the interactive development of code inside a function or test. Helpers deferred_run() (and deferred_clear()) provide a way to explicity run and clear (or just clear) deferred events (#76, @jennybc).
with_connection() now works when existing objects or connections exist with the same names (#120)
with_makevars() now uses tools::makevars_user() to determine the default user makevars file (#77, @siddharthab).
with_options() no longer uses do.call(), so optiosn are not evaluated on exit (#73, @mtmorgan).
with_package() no longer has the help argument (#94, @wendtke).
with_package() now does not try to detach the package if it is already attached before calling with_package() (#107)
with_preserve_seed() now restores .Random.seed if it is not set originally (#124).
Add with_rng_version() and local_rng_version() functions to change the version of the RNG (#90, @gaborcsardi).
with_svg() documentation now is consistent across R versions (#129)
Add with_timezone() and local_timezone() functions to change the time zone (#92, @gaborcsardi).
with_tempfile() and local_tempfile() now delete recursively directories on exit (#84, @meta00).
set_makevars() is now exported (#68, @gaborcsardi).
with_temp_libpaths() gains an action argument, to specify how the temporary library path will be added (#66, @krlmlr).
Fixes test failures with testthat 2.0.0
with_file() function to automatically remove files.
with_connection() function to automatically close R file connections.
with_db_connection() function to automatically disconnect from DBI database connections.
with_gctorture2 command to run code with gctorture2, useful for testing (#47).
with_package(), with_namespace() and with_environment() (and equivalent locals) functions added, to run code with a modified object search path (#38, #48).
Add with_tempfile() and local_tempfile() functions to create temporary files which are cleanup up afterwards. (#32)
Remove the code argument from local_ functions (#50).
Each with_ function now has a local_ variant, which reset at the end of their local scope, generally at the end of the function body.
New functions with_seed() and with_preserve_seed() for running code with a given random seed (#45, @krlmlr).
with_makevars() gains an assignment argument to allow specifying additional assignment types.with_output_sink() and with_message_sink() (#24).