local_language()
now never warns when set to "C"
(#254).
This is a cross-platform and silent way of disabling gettext()
translations.defer()
is now a thin wrapper around base::on.exit()
. This is
possible thanks to two contributions that we made to R 3.5:
on.exit(after = FALSE)
.sys.on.exit()
elsewhere than top-level didn't work. This
is needed for manual invocation with deferred_run()
.Following this change, defer()
is now much faster (although still
slower than on.exit()
which is a primitive function and about as
fast as it gets). This also increases the compatibility of defer()
with on.exit()
(all handlers are now run in the expected order
even if they are registered with on.exit()
) and standalone
versions of defer()
.
source()
is used with a local environment, as opposed to
globalenv()
(the default), you now need to set
options(withr.hook_source = TRUE)
to get proper withr support
(running defer()
or local_
functions at top-level of a script).
This support is disabled by default in local environments to avoid a
performance penalty in normal usage of withr features.deferred_run()
now reports the number of executed expressions with
a message.
deferred_run()
can now be run at any point in a knitr file (#235).
local_tempfile()
now writes lines
in UTF-8 (#210) and always uses
\n
for newlines (#216).
local_pdf()
and friends now correctly restore to the previously
active device (#138).
local_()
now works even if withr isn't attached (#207).
local_par()
and with_par()
now work if you don't set any parameters
(#238).
with_language()
now properly resets the translation cache (#213).
Fixes for Debian packaging.
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).