Non-Standard Evaluation (NSE hereafter) occurs when R expressions are
captured and evaluated in a manner different than if they had been executed
without intervention. `subset`

is a canonical example, which we use here with
the built-in `iris`

data set:

subset(iris, Sepal.Width > 4.1)

`Sepal.Width`

does not exist in the global environment, yet this works because
`subset`

captures the expression and evaluates it within `iris`

.

A limitation of NSE is that it is difficult to use programmatically:

exp.a <- quote(Sepal.Width > 4.1) subset(iris, exp.a)

`oshka::expand`

facilitates programmable NSE, as with this simplified
version of `subset`

:

subset2 <- function(x, subset) { sub.exp <- expand(substitute(subset), x, parent.frame()) sub.val <- eval(sub.exp, x, parent.frame()) x[!is.na(sub.val) & sub.val, ] } subset2(iris, exp.a)

`expand`

is recursive:

exp.b <- quote(Species == 'virginica') exp.c <- quote(Sepal.Width > 3.6) exp.d <- quote(exp.b & exp.c) subset2(iris, exp.d)

We abide by R semantics so that programmable NSE functions are almost identical to normal NSE functions, with programmability as a bonus.

**Any scripts or data that you put into this service are public.**

Embedding an R snippet on your website

Add the following code to your website.

For more information on customizing the embed code, read Embedding Snippets.