rlang (version 0.2.2)

box: Box a value

Description

new_box() is similar to base::I() but it protects a value by wrapping it in a scalar list rather than by adding an attribute. unbox() retrieves the boxed value. is_box() tests whether an object is boxed with optional class. as_box() ensures that a value is wrapped in a box. as_box_if() does the same but only if the value matches a predicate.

Usage

new_box(x, class = NULL)

is_box(x, class = NULL)

as_box(x, class = NULL)

as_box_if(.x, .p, .class = NULL, ...)

unbox(box)

Arguments

x, .x

An R object.

class, .class

For new_box(), an additional class for the boxed value (in addition to rlang_box). For is_box(), as_box() and as_box_if(), a class (or vector of classes) to be passed to inherits_all().

.p

A predicate function.

...

Arguments passed to .p.

box

A boxed value to unbox.

Examples

Run this code
# NOT RUN {
boxed <- new_box(letters, "mybox")
is_box(boxed)
is_box(boxed, "mybox")
is_box(boxed, "otherbox")

unbox(boxed)

# as_box() avoids double-boxing:
boxed2 <- as_box(boxed, "mybox")
boxed2
unbox(boxed2)

# Compare to:
boxed_boxed <- new_box(boxed, "mybox")
boxed_boxed
unbox(unbox(boxed_boxed))

# Use `as_box_if()` with a predicate if you need to ensure a box
# only for a subset of values:
as_box_if(NULL, is_null, "null_box")
as_box_if("foo", is_null, "null_box")
# }

Run the code above in your browser using DataCamp Workspace