Evaluate code in qenv
Usage
# S3 method for class 'qenv'
within(data, expr, ...)
Details
within()
is a convenience method that wraps eval_code
to provide a simplified way of passing expression.
within
accepts only inline expressions (both simple and compound) and allows to substitute expr
with ...
named argument values.
Using language objects with within
Passing language objects to expr
is generally not intended but can be achieved with do.call
.
Only single expression
s will work and substitution is not available. See examples.
Examples
# evaluate code using within
q <- qenv()
q <- within(q, {
i <- iris
})
q <- within(q, {
m <- mtcars
f <- faithful
})
q
#> <environment: 0x56258853f130> 🔒
#> Parent: <environment: package:checkmate>
#> Bindings:
#> - f: [data.frame]
#> - i: [data.frame]
#> - m: [data.frame]
get_code(q)
#> [1] "i <- iris\nm <- mtcars\nf <- faithful"
# inject values into code
q <- qenv()
q <- within(q, i <- iris)
within(q, print(dim(subset(i, Species == "virginica"))))
#> <environment: 0x562589dca9b0> 🔒
#> Parent: <environment: package:checkmate>
#> Bindings:
#> - i: [data.frame]
within(q, print(dim(subset(i, Species == species)))) # fails
#> <qenv.error: object 'species' not found
#> when evaluating qenv code:
#> print(dim(subset(i, Species == species)))>
within(q, print(dim(subset(i, Species == species))), species = "versicolor")
#> <environment: 0x562585888268> 🔒
#> Parent: <environment: package:checkmate>
#> Bindings:
#> - i: [data.frame]
species_external <- "versicolor"
within(q, print(dim(subset(i, Species == species))), species = species_external)
#> <environment: 0x56258817dee0> 🔒
#> Parent: <environment: package:checkmate>
#> Bindings:
#> - i: [data.frame]
# pass language objects
expr <- expression(i <- iris, m <- mtcars)
within(q, expr) # fails
#> <qenv.error: object 'expr' not found
#> when evaluating qenv code:
#> expr>
do.call(within, list(q, expr))
#> <environment: 0x5625884165d0> 🔒
#> Parent: <environment: package:checkmate>
#> Bindings:
#> - i: [data.frame]
#> - m: [data.frame]
exprlist <- list(expression(i <- iris), expression(m <- mtcars))
within(q, exprlist) # fails
#> <qenv.error: object 'exprlist' not found
#> when evaluating qenv code:
#> exprlist>
do.call(within, list(q, do.call(c, exprlist)))
#> <environment: 0x56258948f320> 🔒
#> Parent: <environment: package:checkmate>
#> Bindings:
#> - i: [data.frame]
#> - m: [data.frame]