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 aMakefile
in your working directory, this will automatically generate all associated make functions. For example, if you have aforce
argument in theMakefile
this will generatemake_force()
. This is actually run at startup.lsos()
- a handy function for listing large objects.library()
- Over writes thelibrary()
function with a smarter version. If a package is missing, automatically provides the option to install from CRAN or GitHub.last_error()
andlast_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 toxaringan::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