screenfetch of the new rig/post-tenure gift to myself
screenfetch of the new rig/post-tenure gift to myself

I’ve been a dedicated Linux user since 2005 and made the final switch from Stata to R for statistical analyses in 2012. There are always some configuration issues involved in getting a setup with which I’m comfortable, but I ultimately find it. However, this becomes a bit of a headache when I get a new computer and have to figure out how exactly I did what I did.

Consider this mostly a note to myself on tailoring a Linux installation (preferred: Ubuntu and its derivatives like Linux Mint) to my preferred workflow. Others may find it useful but this is mostly for an audience of one (i.e. me) so that I can remember what I did the next time I have to install a brand new Linux distribution.

  1. Install These Packages Before Installing R
  2. Getting Stan to Run on Ubuntu With Your Makevars File
  3. Alternate Between Microsoft R Open and Vanilla R
  4. Make Underscored Directories Come First in Case-Insensitive Directory Listing

Install These Packages Before Installing R

My preferred R is Microsoft R Open, an enhanced distribution of R that is an easy installation on Ubuntu and its variants. Linux users, unlike Mac or Windows users, will need to install some other packages from the package repository in (Ubuntu) Linux before several R packages will work. Basically, make sure to install these packages in the command line before trying to do anything in R.

sudo apt install curl libcurl4 libssl-dev libxml2-dev libcurl4-openssl-dev libgit2-dev

You’ll need curl for R Open. libssl-dev and libxml2-dev are required for the openssl and xml2 packages in R, which are required packages for tidyverse. libcurl4-openssl-dev is required for RCurl, which brms requires for statistical modeling in Stan. Finally, you’ll need need libgit2-dev for the git2r package in R, the extent to which git2r is required for the devtools package.

Install these packages before installing R or trying to install your favorite packages in R and you’ll ensure there are no package installation problems. I will probably revisit this and update it when I find another Linux package required for another R package.

Getting Stan to Run on Ubuntu With Your Makevars File

I forget why this keeps happening but a Stan model won’t compile in R out the box. There will be an error that reads something like “C++14 standard requested but CXX14 is not defined”, but the fix requires just one line of code. Create a blank document and copy-paste the following into it.

CXX14 = g++ -std=c++1y -Wno-unused-variable -Wno-unused-function -fPIC

Save that file as Makevars and drop it into a .R folder in the home directory. Restart R/Rstudio if necessary but that should do it.

Alternate Between Microsoft R Open and Vanilla R

I’ll occasionally alternate between Microsoft R Open (my default R) and vanilla R that I installed from the official R repository for Ubuntu. However, they install in different locations. Microsoft R Open installs to /usr/bin/R while vanilla R installs to a more convoluted directory of /usr/lib/R/bin/R. This arrangement means Microsoft R Open is the default R given its location in /usr/bin/R. It’ll be the first command found when scanning the /usr directory.

This too is an easy thing to change. Open the .bashrc file in the home directory or, better yet, the .bash_aliases file in the home directory if there is one. Enter the following line for when you want vanilla R in lieu of Microsoft R Open.

alias R='/usr/lib/R/bin/R'

This change will appear when you call R in the terminal. However, Rstudio will still want to point to Microsoft R Open. To get Rstudio to point to vanilla R, add the following line to the .profile file (again in the home directory).

export RSTUDIO_WHICH_R='/usr/lib/R/bin/R'

Logging out and logging back in should be sufficient to finalize these changes. Undoing these is as simple as commenting out those lines in the respective files and logging out/in again.

Make Underscored Directories Come First in Case-Insensitive Directory Listing

Clemson University bought me a new laptop (Lenovo Thinkpad P52s) this summer. It was one of those situations where the university stipulated 1) I must get a new laptop because the money is allocated for this and no other purpose even if it is not a purchase I wanted or expected (kind of like this situation) and 2) it must not cost more than $2,000. I’m normally a Macbook user, so this priced me out of a Macbook Pro. Truth is, though, I’m not sure I even wanted another Macbook anyway because the newer models look completely unappealing for the price tag. So, after our college’s IT guy had a falling out trying to communicate with Dell, I got a new Lenovo Thinkpad P52s.

Unrelated to that aside, Mac’s Finder (i.e. its file manager application) defaults to putting underscore directories first before a case-insensitive alphanumeric sort. I like that default a lot. Jekyll users will recognize that underscored directories coincide with important directories that contain site content. I’ve started to extend that logic to my R projects, creating directories for _cache (code chunks) and _figs (document figures) that I keep elevated in a list view in my file manager. However, that option is nowhere a default in the various system locales on Linux. LC_COLLATE=C will list underscored directories first before directories that start with a number or letter, but it is a case-sensitive setting that elevates uppercase directories above lowercase directories. That might work for some people, but it would make my sprawling Dropbox directory unnavigable.

The good news is there’s a simple way to do this that leans on the default (American) locale of en_US.utf8. It requires a few sudo commands and edits in a text editor.

cd /usr/share/i18n/locales
sudo cp en_US en_US_edited # make a copy of en_US
sudo cp iso14651_t1 iso14651_t1_edited # make a copy of iso14651_t1
sudo cp iso14651_t1_common iso14651_t1_common_edited # make a copy of iso14651_t1_common

Next, open en_US_edited in a text editor (e.g. sudo gedit en_US_edited, if you’re in the directory) and find the line where you see copy "iso14651_t1". Change that to copy "iso14651_t1_edited" and save the file.

Then, open iso14651_t1_edited as you did before with a sudo command. Find the line that reads copy "iso14651_t1_common". Change that to copy "iso14651_t1_common_edited" and save.

Thereafter, open iso14651_t1_common_edited and scroll down a bit until you see this line:

<U005F> IGNORE;IGNORE;IGNORE;<U005F> # 33 _

Change that to this:

<U005F> <RES-1>;IGNORE;IGNORE;<U005F> # 33 _

The last set of steps will involve getting your Linux setup to recognize this new (modified) locale. Open /etc/locale.gen in a text editor with a sudo command and add a line that reads en_US_edited.UTF-8 UTF-8 somewhere as a new line. Save that and run the following commands to finalize what you did.

sudo locale-gen
validlocale en_US_edited.UTF-8
sudo localectl set-locale LANG=en_US_edited.utf8

Finally, reboot the system (not just logout) for the changes to take effect.