R: Create a new "with" function

with_ {withr} | R Documentation

## Create a new "with" function

### Description

This function is a "constructor" for `with_...` functions. It is only needed if you want to alter some global state which is not covered by the existing `with_...` functions, see withr-package for an overview.

### Usage

    with_(set, reset = set, envir = parent.frame())

### Arguments

`set` | `[function(...)]` Function used to set the state. The function can have arbirarily many arguments, they will be replicated in the formals of the returned function.
`reset` | `[function(x)]` Function used to reset the state. The first argument can be named arbitrarily, further arguments with default values, or a "dots" argument, are supported but not used: The function will be called as `reset(old)`.
`envir` | `[environment]` Environment of the returned function.

### Value

`[function(new, code, ...)]` A function with at least two arguments,

- `new`: New state to use

- `code`: Code to run in that state.

If there are more arguments to the function passed in `set` they are added to the returned function. If `set` does not have arguments, the returned function only has a `code` argument.

### Examples

    with_(setwd)

    global_stack <- list()
    set_global_state <- function(state, msg = "Changing global state.") {
      global_stack <- c(list(state), global_stack)
      message(msg)
      state
    }
    reset_global_state <- function(state) {
      old_state <- global_stack[[1]]
      global_stack <- global_stack[-1]
      stopifnot(identical(state, old_state))
    }
    with_(set_global_state, reset_global_state)

[Package withr version 1.0.2 Index]