Applying a function successively in R

July 3, 2012

(This article was first published on mages' blog, and kindly contributed to R-bloggers)

At the R in Finance conference Paul Teetor gave a fantastic talk about Fast(er) R Code. Paul mentioned the common higher-order function Reduce, which I hadn’t used before.

Reduce allows me to apply a function successively over a vector.

What does that mean? Well, if I would like to add up the figures 1 to 5, I could say:

add <- function(x,y) x+y


Reduce(add, 1:5)

Now this might not sound exciting, but Reduce can be powerful. Here is an example with googleVis. To merge two charts I use the function gvisMerge, which takes two charts and wraps them up in an HTML table. Hence, to create a page with a line-, column- area- and bar chart I could use:

pp <- gvisMerge(gvisMerge(gvisMerge(line, column), area), bar)

or use Reduce instead:

pr <- Reduce(gvisMerge, list(line, column, area, bar))

ops <- list(legend='none', width=300, height=150)
line <- gvisLineChart(OpenClose, "Weekday", c("Open", "Close"),
column <- gvisColumnChart(OpenClose, "Weekday", c("Open", "Close"),
area <- gvisAreaChart(OpenClose, "Weekday", c("Open", "Close"),
bar <- gvisBarChart(OpenClose, "Weekday", c("Open", "Close"),

## Applying gvisMerge successively
pr <- Reduce(gvisMerge, list(line, column, area, bar))
## Instead of
pp <- gvisMerge(gvisMerge(gvisMerge(line, column), area), bar)

To leave a comment for the author, please follow the link and comment on his blog: mages' blog. offers daily e-mail updates about R news and tutorials on topics such as: visualization (ggplot2, Boxplots, maps, animation), programming (RStudio, Sweave, LaTeX, SQL, Eclipse, git, hadoop, Web Scraping) statistics (regression, PCA, time series, trading) and more...

If you got this far, why not subscribe for updates from the site? Choose your flavor: e-mail, twitter, RSS, or facebook...

Tags: , , , ,

Comments are closed.