This is a maintenance release. The lazyeval package is no longer developed as the tidyverse is switching to tidy evaluation.
Use new registration system.
MARK_NOT_MUTABLE() in prevision of an API change in R core
No longer check the type of the sides of the formula.
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 optional
data argument. Pronouns
.env can be used to resolve ambiguity in this case. (#43). Longer forms
f_eval_lhs() emphasise the side of the formula that you want to evaluate (#64).
f_interp() provides a full quasiquoting system using
uq() for unquote and
uqs() for unquote-splice (#36).
dots_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
as_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
Create a formula from a quoted call and an environment with
“Unwrap” a formula removing one level from the stack of parent environments with
Get or set either side of a formula with
f_lhs(), and the environment with
Convert to text/label with
I’ve also added
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).
.ignore_empty argument to drop extra arguments (#32).
interp.formula() only accepts single-sided formulas (#37).
interp() accepts an environment in
interp.character() always produes a single string, regardless of input length (#27).
Fixed an infinite loop in
lazy_dots(.follow_symbols = TRUE) (#22, #24)
lazy() now fails with an informative error when it is applied on an object that has already been evaluated (#23, @lionel-).
lazy() no longer follows the expressions of lazily loaded objects (#18, @lionel-).
as.lazy_dots() gains a method for NULL, returning a zero-length list.
auto_names() no longer truncates symbols (#19, #20)