[Rd] Are R packages supposed to be "relocatable"? (avoiding BioConductor scripts...)

Martin Morgan mtmorgan at fhcrc.org
Fri Jul 20 01:20:17 CEST 2012

On 07/19/2012 09:13 AM, Paul Johnson wrote:
> I've asked a question in the BioConductor list about package
> management. My solution depends on your answer to the following
> question.
> Are installed R packages "relocatable"?
> I mean relocatable in the same sense that files in a RedHat RPM file
> might be "relocatable" after compiling
> (http://www.rpm.org/max-rpm/ch-rpm-reloc.html).  This allows one to
> build a package as the ordinary user and then the root user can take
> the result and put it wherever it fits well in the path (say,
> /usr/local/lib/R/library).
> Here is why I asked.  I manage packages in our cluster and some users
> have asked me to install some BioConductor packages.  BioConductor
> install documents expect me to run a script as root that does a bunch
> of changes, and I'm just unwilling to do that.  If I have to do
> something as root, it has to be something more focused like running a
> particular R command (install.packages(), for example).  It seems
> insane to me that they expect (http://www.bioconductor.org/install) a
> root user to run
> source("http://bioconductor.org/biocLite.R")
> biocLite("limma")

For the record, this does four things.

(1) The 'source' command installs the BiocInstaller package appropriate 
for your (recent) version of R or, if this package is already installed, 
attaches it.

All remaining steps are executed by scripts in the BiocInstaller 
package, so after an initial invocation the 'source()' statement can be 
replaced by library(BiocInstaller).

(2) biocLite() invokes BiocInstaller::biocLite, which checks whether 
BiocInstaller is current and, if not, updates it. Disable this behaviour 
with the option suppressAutoUpdate=TRUE.

(3) The limma package and needed dependencies are installed, using 
install.packages() and the repositories appropriate for your version of 
R (paying attention to utils::setRepositories() and 
utils::chooseBioCmirror()). The 'lib' argument to biocLite is passed to 
install.packages() so the user has control over the directory in which 
packages will be installed.

(4) biocLite checks whether any packages are out-of-date relative to the 
version in the repository, and offers to update those that are out of 
date. Packages that are in directories that cannot be written are 
reported, via a warning and hence when biocLite finishes, as "installed 
directory not writeable, cannot update packages '...'" (this message 
apparently confused you; we will try for a better wording). Use 
suppressUpdates=TRUE to suppress this step, ask=FALSE to have old 
packages (in writeable directories) updated without being prompted; a 
lib.loc argument can be used to restrict the locations where 
old.packages() searches.

The arguments to biocLite are documented on its help page in the 
BiocInstaller package, ?biocLite.

For step (3), Prof Ripley & Dr Urbanek (and me in my response to your 
Bioconductor post, 
https://stat.ethz.ch/pipermail/bioconductor/2012-July/046999.html) are 
correct in stating that this can be done with a direct call to 

Step (4) arises because Bioconductor packages (a) follow a semi-annual 
release cycle, with a 'release' and 'devel' branch, and (b) generally 
have greater dependencies amongst one another. In the past, two very 
common scenarios leading to problems were that user installations mix 
packages from different releases of Bioconductor, and users report bugs 
that have already been addressed via bug fixes to the current release. 
So step (4) is trying to be pro-active, and based on traffic to the 
mailing list this has generally been successful. This synchronization is 
more important, and difficult for the user to manage directly, now that 
R has moved to an annual release cycle.

Steps (1) and (2) are needed to bootstrap the process. The relatively 
recent introduction of the BiocInstaller package allows us to document 
biocLite in a standard way, as well as provide the code in a more 
familiar fashion. Step (1) is partly a legacy (BiocInstaller is not in 
all releases of Bioconductor), and partly a simplification to avoid 
confusion (avoiding 'first time users should do A, return users should 
do B').

As a 'normal' user it is safe and appropriate to use biocLite to manage 
Bioconductor (and CRAN) packages. One takes a more cautious approach as 
'root', but I personally would be comfortable administering a widely 
used R / Bioconductor installation with biocLite.

Martin Morgan

> If I could do the installs as me with their script, and then copy the
> install folder into the system, then it would be OK, if the packages
> would work.
> Or perhaps post-processing is required to fiddle some paths inside
> package files?
> pj

Computational Biology / Fred Hutchinson Cancer Research Center
1100 Fairview Ave. N.
PO Box 19024 Seattle, WA 98109

Location: Arnold Building M1 B861
Phone: (206) 667-2793

More information about the R-devel mailing list