Skip to contents

Evaluate code in qenv

Usage

# S3 method for class 'qenv'
within(data, expr, ...)

Arguments

data

(qenv)

expr

(expression) to evaluate. Must be inline code, see Using language objects...

...

named argument value will substitute a symbol in the expr matched by the name. For practical usage see Examples section below.

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 expressions 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]