lazyeval 0.2.0
Formula-based lazy evaluation
Lazyeval has a new system for lazy-eval based on formulas, described in depth in the new lazyeval vignette. This system is still a little experimental - it hasn't seen much use outside of the vignette, so it certainly may change a little in the future. However, long-term goal is to use these tools across all of my packages (ggplot2, tidyr, dplyr, etc), and I am fairly confident that this is a robust system that won't need major changes.
There are three key components:
f_eval()evaluates a formula in the environment where it was defined.
If supplied, values are first looked for in an optionaldataargument.
Pronouns.dataand.envcan be used to resolve ambiguity in this case.
(#43). Longer formsf_eval_rhs()andf_eval_lhs()emphasise the side
of the formula that you want to evaluate (#64).f_interp()provides a full quasiquoting system usinguq()for unquote
anduqs()for unquote-splice (#36).f_capture()anddots_capture()make it easy to turn promises
and...into explicit formulas. These should be used sparingly, as
generally lazy-eval is preferred to non-standard eval.- For functions that work with
...,f_list()andas_f_list()make it
possible to use the evaluated LHS of a formula to name the elements of a
list (#59).
The core components are accompanied by a number of helper functions:
- Identify a formula with
is_formula(). - Create a formula from a quoted call and an environment with
f_new(). - "Unwrap" a formula removing one level from the stack of parent environments
withf_unwrap(). - Get or set either side of a formula with
f_rhs()orf_lhs(), and
the environment withf_env(). - Convert to text/label with
f_text()andf_label().
I've also added expr_find(), expr_text() and expr_label() explicitly to find the expression associated with a function argument, and label it for output (#58). This is one of the primary uses cases for NSE. expr_env() is a similar helper that returns the environment associated with a promise (#67).