Github
LinkedIn
Twitter
YouTube
RSS

Customising your Rprofile

Published: January 17, 2020

Customising your Rprofile

What is an Rprofile

Every time R starts, it runs through a couple of R scripts. One of these scripts is the .Rprofile. This allows users to customise their particular set-up. However, some care has to be taken, as if this script is broken, this can cause R to break. If this happens, just delete the script!

Full details of how the .Rprofile works can be found in my book with Robin on Efficient R programming. However, roughly R will look for a file called .Rprofile first in your current working directory, then in your home area. Crucially, it will only load the first file found. This means you can have per project Rprofile.

My Rprofile

A few months ago, I noticed my Rprofile was becoming increasing untidy, so I bundled it up into a single, opinionated, package. This also made it easier for me to switch between computers. Last week, there was an interesting twitter thread on customising your .Rprofile started by Kara Woo. The thread became popular with lots of great suggestions on neat customisations. This also provided the impetus to write this post.

Installation

You can install the package from GitHub with:

# install.packages("remotes")
remotes::install_github("csgillespie/rprofile")

The package also uses two non-cran packages

# Used for nice prompts
remotes::install_github("gaborcsardi/prompt")
# Used for nice colours in the terminal; not for Windows
remotes::install_github("jalvesaq/colorout")

R Prompt

You can make simple customisations to your R prompt using options(), but for extra bling I use the the {prompt} package.

  • If you are in a Git repo, the branch will be displayed.
  • If R’s memory becomes large, the size will also be displayed.

As the RStudio console already has alot of nice features, e.g. syntax highlighting, a distinction needs to be made between the RStudio Console and running R in the terminal. So in .Rprofile I’ve got some logic to detect where I’m running R (in my .Rprofile) and adjust accordingly.

Useful Start-up Messages

If you use R a lot, you want to minimise noise. I used to have the {fortunes} package display a fortune in my profile, but this got repetitive. Then I tried grabbing stuff from twitter, but this slowed everything down when the wifi was poor.

Currently three start-up messages are displayed:

  • The wifi network you are connected too with speed info (Linux only)
  • The number of open R sessions (Linux only)
  • RStudio project info
  • I also clear all the standard R licence stuff from the screen.

If anyone wants to expand the Linux only functions to Windows and Macs, please submit a pull request!

Helper Functions

It’s always dangerous to load functions in your start-up script, so I’ve only included functions I’m fairly sure won’t be used in a script.

  • create_make_functions() - if you have a Makefile in your working directory, this will automatically generate all associated make functions. For example, if you have a force argument in the Makefile this will generate make_force(). This is actually run at startup.
  • lsos() - a handy function for listing large objects.
  • library() - Over writes the library() function with a smarter version. If a package is missing, automatically provides the option to install from CRAN or GitHub.
  • last_error() and last_trace() - pre-loads from {rlang}. Nicer error investigation.

RStudio Functions

  • op(path = ".") - Creates & opens an RStudio project in the directory specified.
  • cp() - Lists previous RStudio projects and gives an option to open.
  • inf_mr() - Short cut to xaringan::inf_mr().

Setting Better options()

The set_startup_options() function sets better (in my opinion) set of start-up options. These include

  • Setting Ncpus to run parallel installs by default
  • Removing significant stars
  • Set mc.cores to a sensible default
  • Change the continue = "+" to a blank space
  • Reduce the default print length
  • Plus a few others (see ?set_startup_options)

I’ve also created a convenience function for adding additional R repositories - set_repos(). Probably not needed by most people.

Example .Rprofile

Open your .Rprofile, e.g. file.edit("~/.Rprofile") and customise however you want. Here’s an example

if (interactive() && requireNamespace("rprofile", quietly = TRUE)) {

  # Only useful if you use Makefiles
  rprofile::create_make_functions()

  # Startup options
  rprofile::set_startup_options()

  # Not RStudio console
  if (rprofile::is_terminal()) {
    rprofile::set_terminal()
  } else {
    rprofile::set_rstudio()
  }

  .env = rprofile::set_functions()
  attach(.env)
  # Display wifi and no of R sessions
  # Linux only
  rprofile::set_startup_info()
}

# Prints RStudio project on start-up
setHook("rstudio.sessionInit", function(newSession) {
  active_rproj = rprofile::get_active_rproj()
  if (!is.null(active_rproj)) {
    message(glue::glue("{crayon::yellow('R-project:')} {active_rproj}"))
  }
}, action = "append")

Notes and thanks

  • The lsos() function was taken from the SO question.
  • The improved version of library() was adapted from the autoinst. I did think about importing the package, but I had made too many personal tweaks.
  • Setting the prompt uses the excellent prompt package.
  • I’ve probably “borrowed” some of the other ideas from blogposts and SO questions. If I’ve missed crediting you, please let me know and I’ll rectify it.
  • If you have any suggestions or find bugs, please use the GitHub issue tracker
  • Feel free to submit pull requests

Jumping Rivers are RStudio Certified Full Service Partners. If you need help installing, or running RStudio Pro products, give us a shout. We might even be able to do it for free!