Applying a function successively in R

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
add(add(add(add(1,2),3),4),5)

or

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))

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

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

Citation

For attribution, please cite this work as:

Markus Gesmann (Jul 03, 2012) Applying a function successively in R. Retrieved from https://magesblog.com/post/2012-07-03-applying-function-successively-in-r/

BibTeX citation:

@misc{ 2012-applying-a-function-successively-in-r,
 author = { Markus Gesmann },
 title = { Applying a function successively in R },
 url = { https://magesblog.com/post/2012-07-03-applying-function-successively-in-r/ },
 year = { 2012 }
 updated = { Jul 03, 2012 }
}

Related