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.
To install these packages offline, you can download a compressed file that matches your operating system from ; copy the file to your offline machine. In some cases you'll have to download the dependencies packages as well; if this is required, it will be noted under your package link.
First, we'll need to create a directory in the home directory, then set a variable to point R at that directory, and then install the package. and you're done. You can pick any directory to make your personal R library.
Press Ctrl + Left Click or Cmd + Left Click in the function name (written on the script), when using RStudio. Go to the CRAN (or GitHub, R-forge, …) page of the package and download the package file to inspect the source code manually.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With