Some Neat New R Notations
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.
The R package seplyr supplies a few neat new coding notations.
 An Abacus, which gives us the term “calculus.”
An Abacus, which gives us the term “calculus.”The first notation is an operator called the “named map builder”.  This is a cute notation that essentially does the job of stats::setNames().  It allows for code such as the following:
library("seplyr")
names <- c('a', 'b')
names := c('x', 'y')
#>   a   b 
#> "x" "y"
This can be very useful when programming in R, as it allows indirection or abstraction on the left-hand side of inline name assignments (unlike c(a = 'x', b = 'y'), where all left-hand-sides are concrete values even if not quoted).
A nifty property of the named map builder is it commutes (in the sense of algebra or category theory) with R‘s “c()” combine/concatenate function.  That is: c('a' := 'x', 'b' := 'y') is the same as c('a', 'b') := c('x', 'y').  Roughly this means the two operations play well with each other.
The second notation is an operator called “anonymous function builder“.  For technical reasons we use the same “:=” notation for this (and, as is common in R, pick the correct behavior based on runtime types).
The function construction is written as: “variables := { code }” (the braces are required) and the semantics are roughly the same as “function(variables) { code }“.  This is derived from some of the work of Konrad Rudolph who noted that most functional languages have a more concise “lambda syntax” than “function(){}” (please see here and here for some details, and be aware the seplyr notation is not as concise as is possible).
This notation allows us to write the squares of 1 through 4 as:
sapply(1:4, x:={x^2})
instead of writing:
sapply(1:4, function(x) x^2)
It is only a few characters of savings, but being able to choose notation can be a big deal.  A real victory would be able to directly use lambda-calculus notation such as “(λx.x^2)“.  In the development version of seplyr we are experimenting with the following additional notations:
sapply(1:4, lambda(x)(x^2)) sapply(1:4, λ(x, x^2))
(Both of these currenlty work in the development version, though we are not sure about submitting source files with non-ASCII characters to CRAN.)
R-bloggers.com offers daily e-mail updates about R news and tutorials about learning R and many other topics. Click here if you're looking to post or find an R/data-science job.
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.
