Using packrat

RStudio have released packrat, an R package to manage dependencies between packages to ensure that what gets shipped with a project works.

Following the walkthrough example should give a pretty good idea of what you need to do.

Before you start

Ensure that you have the latest versions of devtools and packrat from github, using devtools from CRAN gave me an error.

  library(devtools)
  install_github("devtools")
  devtools::install_github("rstudio/packrat")

With that done, you can procede as below…

Example

Code I ran to get the Distance 6.2 packrat “project”.

Create a package directory and run (from the level above the package directory):

  library(packrat)
  packrat::bootstrap("packrat-distance-6.2/")

inside, this creates the requisite files and folders. You should get some messages asking you to restart R.

Now starting R again (and ensuring the working directory is our project folder), we effectively have a “fresh” R install, so we have to install all the packages again, but now they will be frozen at their “correct” versions.

We want the versions of dsm and mrds currently on CRAN, so install them as usual:

  install.packages(c("dsm","mrds"))

packrat needs to find a .R file with a library or require call somewhere in the directory (I guess to prove you’re serious? I don’t know). Anyway just adding

  library(mrds)
  library(dsm)

to a file (I called mine packrat-load.R) will keep it happy.

Now to take the snapshot of the package dependencies:

  packrat::snapshot() 

This downloaded the sources of the dependencies and install them. This means you have to have C and Fortran compilers installed!

Now when you launch R in the project directory we will get the right versions of the packages (.Renviron and .Rprofile ensure this).

Version control

You don’t need to include the library/ folder but you do need the other files added to your git repository.

When you clone the repository, you need to call initPackrat() to install the source packages. In terms of shipping, building on the given platform should suffice.

References