Author: John Mount
Date: 2023-08-19

# lambda Function Builder

#### John Mount

#### 2023-08-19

The `CRAN` version of the `R` 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:

    library("wrapr")
    wrapr::defineLambda(name = "l")
    ls()

    ##  [1] "LEFT_NAME"       "OTHER_SYMBOL"    "X"               "Y"
    ##  [5] "angle"           "d"               "d2"              "df"
    ##  [9] "f"               "inputs"          "l"               "plotb"
    ## [13] "variable"        "variable_name"   "variable_string" "x"

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:

    l(x, x^2)

    ## function (x)
    ## x^2

We can use such a function to square the first four positive integers as follows:

    sapply(1:4, l(x, x^2))

    ## [1]  1  4  9 16

Dot-pipe style notation does not need the `l()` factory as it treats pipe stages as expressions parameterized over the variable “`.`”:

    1:4 %.>% { .^2 }

    ## [1]  1  4  9 16

And we can also build functions that take more than one argument as follows:

    l(x, y, x + 3*y)

    ## function (x, y)
    ## x + 3 * y