R: Poke an object in an environment

env_poke {rlang} | R Documentation

## Poke an object in an environment

### Description

`env_poke()` will assign or reassign a binding in `env` if `create` is `TRUE`. If `create` is `FALSE` and a binding does not already exists, an error is issued.

### Usage

    env_poke(env = caller_env(), nm, value, inherit = FALSE, create = !inherit)

### Arguments

`env` | An environment.
`nm` | Names of bindings. `nm` must be a single string.
`value` | The value for a new binding.
`inherit` | Whether to look for bindings in the parent environments.
`create` | Whether to create a binding if it does not already exist in the environment.

### Details

If `inherit` is `TRUE`, the parents environments are checked for an existing binding to reassign. If not found and `create` is `TRUE`, a new binding is created in `env`. The default value for `create` is a function of `inherit`: `FALSE` when inheriting, `TRUE` otherwise.

This default makes sense because the inheriting case is mostly for overriding an existing binding. If not found, something probably went wrong and it is safer to issue an error. Note that this is different to the base R operator `<<-` which will create a binding in the global environment instead of the current environment when no existing binding is found in the parents.

### Value

The old value of `nm` or a zap sentinel if the binding did not exist yet.

### Life cycle

`env_poke()` is experimental. We are still experimenting with reducing the number of redundant functions by using quasiquotation. It is possible `env_poke()` will be deprecated in favour of `env_bind()` and name-unquoting with `:=`.

[Package rlang version 0.4.3 Index]