--- title: "lambda Function Builder" author: "John Mount" date: "`r Sys.Date()`" output: rmarkdown::html_vignette vignette: > %\VignetteIndexEntry{lambda Function Builder} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- The [`CRAN`](https://cran.r-project.org) version of the [`R`](https://www.r-project.org) package [`wrapr`](https://CRAN.R-project.org/package=wrapr) package now includes a concise anonymous function constructor: `l()`. To use it please do the following: attach `wrapr` and ask it to place a definition for `l()` in your environment: ```{r wrapri} library("wrapr") wrapr::defineLambda(name = "l") ls() ``` Note: throughout this document we are using the letter "`l`" as a stand-in for the Greek letter lambda, as this non-ASCII character can cause formatting problems in some situations. You can use `l()` to define functions. The syntax is: `l(arg [, arg]*, body [, env=env])`. That is we write a `l()`-call (which you can do by cutting and pasting) and list the desired function arguments and then the function body. For example the function that squares numbers is: ```{r fsq1} l(x, x^2) ``` We can use such a function to square the first four positive integers as follows: ```{r fsq2} sapply(1:4, l(x, x^2)) ``` Dot-pipe style notation does not need the `l()` factory as it treats pipe stages as expressions parameterized over the variable "`.`": ```{r fsqp} 1:4 %.>% { .^2 } ``` And we can also build functions that take more than one argument as follows: ```{r ft} l(x, y, x + 3*y) ```