# NOT RUN {
# env_bind() is a programmatic way of assigning values to symbols
# with `<-`. We can add bindings in the current environment:
env_bind(get_env(), foo = "bar")
foo
# Or modify those bindings:
bar <- "bar"
env_bind(get_env(), bar = "BAR")
bar
# It is most useful to change other environments:
my_env <- env()
env_bind(my_env, foo = "foo")
my_env$foo
# A useful feature is to splice lists of named values:
vals <- list(a = 10, b = 20)
env_bind(my_env, !!! vals, c = 30)
my_env$b
my_env$c
# You can also unquote a variable referring to a symbol or a string
# as binding name:
var <- "baz"
env_bind(my_env, !!var := "BAZ")
my_env$baz
# env_bind() and its variants are generic over formulas, quosures
# and closures. To illustrate this, let's create a closure function
# referring to undefined bindings:
fn <- function() list(a, b)
fn <- set_env(fn, child_env("base"))
# This would fail if run since `a` etc are not defined in the
# enclosure of fn() (a child of the base environment):
# fn()
# Let's define those symbols:
env_bind(fn, a = "a", b = "b")
# fn() now sees the objects:
fn()
# }
Run the code above in your browser using DataLab