Becoming A Serious R User

There are those that use R as part of a class, typing in the "commands" exactly as the instructor told them, and then there are the serious R users. If you understand the basics of R and are ready to take that next step toward your black belt, here's a list of learning resources.

1. The lecture notes from Jenny Bryan's STAT 545 class at UBC.

2. Hadley Wickham's book R Packages.

3. Hadley Wickham's book Advanced R.

4. These R manuals: Writing R Extensions, R Internals, and The R Language Definition. Familiarize yourself with the R source on Github. The most important header file is src/include/Rinternals.h. If you would rather read R code than C code (and who wouldn't, given the preprocessor-heavy nature of the R source), start in directory src/library/stats/R. For instance, in cor.R, there is a function cov. Inside that function are .Call function calls with C_cov as the first argument. You can look in src/library/stats/src/cov.c and see the underlying C code in all its glory.

5. Study functional programming. R is a functional programming language, having started out as a dialect of Scheme, which is itself a functional dialect of Lisp. It's my belief that functional programming is generally a better way to proceed. There are numerous references out there, but you will probably need to learn another languagein the process. If it was easy to become a Jedi Knight, everyone would be a Jedi Knight.

The most sacred of texts for functional programmers, used for many years to teach intro programming classes at MIT and other top institutions, is SICP. You can use a variety of Scheme implementations for SICP; Guile should work well.

If you want to take the easy road, you can take the Programming Languages course taught by Dan Grossman of the University of Washington or Functional Programming Principles in Scala taught by Martin Odersky, the creator of the Scala language.

Alternatively, you can learn a functional language like Haskell, OCaml, Clojure, or Racket.

Last Update: 2016-03-09


[Return To Index] [My Website]