Monday, February 2, 2015

My "Top 5 R Functions"

In preparation for a R Workgroup meeting, I started thinking about what would be my "Top 5 R Functions". I ruled out the functions for basic mechanics - save, load, mean, etc. - they're obviously critical, but every programming language has them, so there's nothing especially "R" about them. I also ruled out the fancy statistical analysis functions like (g)lmer -- most people (including me) start using R because they want to run those analyses so it seemed a little redundant. I started using R because I wanted to do growth curve analysis, so it seems like a weak endorsement to say that I like R because it can do growth curve analysis. No, I like R because it makes (many) somewhat complex data operations really, really easy. Understanding how take advantage of these R functions is what transformed my view of R from purely functional (I need to do analysis X and R has functions for doing analysis X) to an all-purpose tool that allows me to do data processing, management, analysis, and visualization extremely quickly and easily. So, here are the 5 functions that did that for me:

  1. subset() for making subsets of data (natch)
  2. merge() for combining data sets in a smart and easy way
  3. melt() for converting from wide to long data formats
  4. dcast() for converting from long to wide data formats, and for making summary tables
  5. ddply() for doing split-apply-combine operations, which covers a huge swath of the most tricky data operations 
For anyone interested, I posted my R Workgroup notes on how to use these functions on RPubs. Side note: after a little configuration, I found it super easy to write these using knitr, "knit" them into a webpage, and post that page on RPubs.

Conspicuously missing from the above list is ggplot, which I think deserves a special lifetime achievement award for how it has transformed how I think about data exploration and data visualization. I'm planning that for the next R Workgroup meeting.


  1. Hi Dan, I will agree that these five are what makes data manipulation in R so much easier. I would caution on subset(), since the documentation calls it a "convienence function" and intended for use interactively. Using the [] notation for subsetting is probably a little more stable for programming needs.

    I also enjoy seeing that 60% of your chosen functions come from the Hadley Wickham suite (reshape2, plyr). I love those functions and use them all the time. Recently Hadley and a few others over at RStudio have developed the "dplyr" package which widely uses the "piping" technique from the "magrittr" package. All signs point to this new method of data manipulatiion in R may be the wave of the future, and maybe even make functions 3-5 listed above obsolete. I said 'maybe'. Who knows, and that's the fun of it!

  2. This comment has been removed by a blog administrator.