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 their blog: mages' blog. offers daily e-mail updates about R news and tutorials on topics such as: Data science, Big Data, R jobs, 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.

Search R-bloggers


Never miss an update!
Subscribe to R-bloggers to receive
e-mails with the latest R posts.
(You will not see this message again.)

Click here to close (This popup will not appear again)