R: Box a value

box {rlang} | R Documentation

## 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)

    unbox(box)

### Arguments

`class` | For `new_box()`, an additional class for the boxed value (in addition to `rlang_box`). For `is_box()`, a class or vector of classes passed to `inherits_all()`.
`...` | Additional attributes passed to `base::structure()`.
`x, .x` | An R object.
`box` | A boxed value to unbox.

### Examples

    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")

[Package rlang version 0.3.2 Index]