From ripley at stats.ox.ac.uk  Wed Aug 20 16:46:08 2008
From: ripley at stats.ox.ac.uk (Prof Brian Ripley)
Date: Wed, 20 Aug 2008 15:46:08 +0100 (BST)
Subject: [Rd] Outdated dependencies and install.packages()
In-Reply-To: <48ABF23B.70707@biostat.ku.dk>
References: <48ABF23B.70707@biostat.ku.dk>
Message-ID: <alpine.LFD.1.10.0808201232150.5896@gannet.stats.ox.ac.uk>

On Wed, 20 Aug 2008, Peter Dalgaard wrote:

> This looks like a buglet:
>
>> install.packages("lme4", depend=TRUE, lib="~/Rlibrary/")
> --- Please select a CRAN mirror for use in this session ---
> [...snip...]
> ** preparing package for lazy loading
> Error: package 'Matrix' 0.999375-4 was found, but >= 0.999375.11 is
> required by 'lme4'
> Execution halted
> ERROR: lazy loading failed for package 'lme4'
> ** Removing '/home/bs/pd/Rlibrary/lme4'
> ** Restoring previous '/home/bs/pd/Rlibrary/lme4'
>
> and the DESCRIPTION file for lme 4 does have
>
> Depends: methods, R(? 2.7.0), Matrix(? 0.999375-11), lattice
> <http://cran.r-project.org/web/packages/lattice/index.html>
>
>
> Looks like we're either not checking the version requirement of
> dependencies, or something is making 4 > 11... (from my reading of the
> code, it is the former, but I could have missed something).

We don't check version requirements of dependencies in install.packages(). 
That's a minefield related to having multiple versions of a package on a 
system and which gets loaded/namespace loaded, so you can easily have the 
needed version but pick up a different one.

Depending on whether lazy-loading is in place (and various other issues) 
you may or may not need the dependencies to install the package.  It's 
also a problem that you can update dependencies to incompatible ones, so 
the versions available at installation are only part of the story.

I don't see why the message reports .11 not -11, but that may be 
related to "package_version" classes.

> We should at least document the behaviour.

I am not sure where you think it should be documented and is not.
But for install.packages():

dependencies: logical indicating to also install uninstalled packages
           on which these packages depend/suggest/import (and so on
           recursively).  Not used if 'repos = NULL'. Can also be a
           character vector, a subset of 'c("Depends", "Imports",
           "Suggests")'.

'uninstalled' seems pretty clear to me.

-- 
Brian D. Ripley,                  ripley at stats.ox.ac.uk
Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
University of Oxford,             Tel:  +44 1865 272861 (self)
1 South Parks Road,                     +44 1865 272866 (PA)
Oxford OX1 3TG, UK                Fax:  +44 1865 272595


[Rd] Outdated dependencies and install.packages()
Prof Brian Ripley