86 lines
3.2 KiB
Markdown
86 lines
3.2 KiB
Markdown
|
|
# lazyeval 0.2.2
|
|
|
|
* Fix protection issues from rchk reports.
|
|
|
|
|
|
# lazyeval 0.2.1
|
|
|
|
This is a maintenance release. The lazyeval package is no longer
|
|
developed as the tidyverse is switching to tidy evaluation.
|
|
|
|
* Use new registration system.
|
|
|
|
* Switch from `SET_NAMED()` to `MARK_NOT_MUTABLE()` in prevision of an
|
|
API change in R core
|
|
|
|
* No longer check the type of the sides of the formula.
|
|
|
|
|
|
# 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 optional `data` argument.
|
|
Pronouns `.data` and `.env` can be used to resolve ambiguity in this case.
|
|
(#43). Longer forms `f_eval_rhs()` and `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).
|
|
|
|
* `f_capture()` and `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 `...`, `f_list()` and `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 `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
|
|
with `f_unwrap()`.
|
|
|
|
* Get or set either side of a formula with `f_rhs()` or `f_lhs()`, and
|
|
the environment with `f_env()`.
|
|
|
|
* Convert to text/label with `f_text()` and `f_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).
|
|
|
|
## Fixes to existing functions
|
|
|
|
* `lazy_dots()` gains `.ignore_empty` argument to drop extra arguments (#32).
|
|
|
|
* `interp.formula()` only accepts single-sided formulas (#37).
|
|
|
|
* `interp()` accepts an environment in `.values` (#35).
|
|
|
|
* `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-).
|
|
|
|
# lazyeval 0.1.10
|
|
|
|
* `as.lazy_dots()` gains a method for NULL, returning a zero-length
|
|
list.
|
|
|
|
* `auto_names()` no longer truncates symbols (#19, #20)
|