Offline install of R package and dependencies

cran, r

Solution

The correct answer was given by Joshua Ulrich in the comment on the question:

The key is prefixing the argument to either `repos` or `contriburl` with `file://`. So in Unixy systems one could do:

install.packages("ggplot2", contriburl="file:///path/to/packages/")

This assumes that all required source packages, as well as a PACKAGES index file is available in `/path/to/packages`. If no PACKAGES file is present, this should be generated first using:

library(tools)
write_PACKAGES("/path/to/packages/")

which will generate an index of all source packages found in this directory. Note that in the example, there are 3 slashes behind the `file:` prefix. The third slash indicates a path relative to the root of the file system.

The difference between the `repos` and `contriburl` argument is that `repos` will append another `/src/contrib` to the path specified, as this is usually where source packages are located on an official CRAN repository mirror.

Problem

Suppose I need to install a number of packages on a (Linux) machine that does not have an internet connection. Let's say that I downloaded a copy of cran and burned it on a DVD that I bring to the offline location: ``` wget ftp://cran.r-project.org/pub/R/src/contrib/*.tar.gz ``` I can even add a PACKAGES file that contains an overview of all the source packages and their dependencies: ``` library(tools) write_PACKAGES() ``` How could I use this offline to install a source package in such a way that dependencies are resolved and installed from the local files as well? For example, someone wants to install package ggplot2, which has a fairly deep dependency structure. Assume the source package of ggplot2 and all of its dependencies are available as source packages in the current working directory. If I do: ``` install.packages("ggplot2_0.9.1.tar.gz", repos=NULL) ``` This results in an error, because the dependencies are not resolved at all. Alternatively: ``` install.packages(list.files(pattern="*.tar.gz"), repos=NULL) ``` However this also ignores the dependency structure, and tries to install packages in alphabetical order, which will also fail. I looked into `available.packages` and `contrib.url` but I just can't find an example of installing a source package from a local file including it's dependencies.

Original source