R v. Python

Written by: Paul Rubin

Primary Source: OR in an OB World, 6/16/2019.

A couple of days ago, I was having a conversation with someone that touched on the curriculum for a masters program in analytics. One thing that struck me was requirement of one semester each of R and Python programming. On the one hand, I can see a couple of reasons for requiring both: some jobs will require the worker to deal with both kinds of code; and even if you’re headed to a job where one of them suffices, you don’t know which one it will be while you’re in the program. On the other hand, I tend to think that most people can get by nicely with just one or the other (in my case R), if not neither. Also, once you’ve learned an interpreted language (plus the general concepts of programming), I tend to think you can learn another one on your own if you need it. (This will not, however, get you hired if proficiency in the one you don’t know is an up-front requirement.)

I don’t really intend to argue the merits of requiring one v. both here, nor the issue of whether a one-semester deep understanding of two languages is as good as a two-semester deep understanding of one language. Purely by coincidence, that conversation was followed by my discovering R vs. Python for Data Science, a point-by-point comparison of the two by Norm Matloff (a computer science professor at UC Davis). If you are interested in data science and trying to decide which one to learn (or which to learn first), I think Matloff’s comparison provides some very useful information. With the exception of “Language unity”, I’m inclined to agree with his ratings.

Matloff calls language unity a “horrible loss” for R, emphasizing a dichotomy between conventional/traditional R and the so-called “Tidyverse” (which is actually a set of packages). At the same time, he calls the transition form Python 2.7 to 3.x “nothing too elaborate”. Personally, I use Tidyverse packages when it suits me and not when it doesn’t. There’s a bit of work involved in learning each new Tidyverse package, but that’s not different from learning any other package. He mentions tibbles and pipes. Since a tibble is a subclass of a data frame, I can (and often do) ignore the differences and just treat them as data frames. As far as pipes go, they’re not exactly a Tidyverse creation. The Tidyverse packages load the magrittr package to get pipes, but I think that package predates the Tidyverse, and I use it with “ordinary” R code. Matloff also says that “… the Tidyverse should be considered advanced R, not for beginners.” If I were teaching an intro to R course, I think I would introduce the Tidyverse stuff early, because it imposes some consistency on the outputs of R functions that is sorely lacking in base R. (If you’ve done much programming in R, you’ve probably had more than a few “why the hell did it do that??” moments, such as getting a vector output when you expected a scalar or vice versa.) Meanwhile, I’ve seen issues with software that bundled Python scripts (and maybe libraries), for instance because users who came to Python recently and have only ever installed 3.x discover that the bundled scripts require 2.x (or vice versa).

Anyway, that one section aside (where I think Matloff and I can agree to disagree), the comparison is quite cogent, and makes for good reading.

The following two tabs change content below.
I'm an apostate mathematician, retired from a business school after 33 years of teaching mostly (but not exclusively) quantitative methods courses. My academic interests lie in operations research. I also study Tae Kwon Do a bit on the side.

Latest posts by Paul Rubin (see all)