From janko.thyson.rstuff at googlemail.com  Thu Aug 18 19:31:02 2011
From: janko.thyson.rstuff at googlemail.com (Janko Thyson)
Date: Thu, 18 Aug 2011 19:31:02 +0200
Subject: [Rd] Bug: argument 'lib.loc' not passed on appropriately in
	'library()'?
Message-ID: <4E4D4C56.7070100@googlemail.com>

Dear list,

I'm experimenting with setting up custom 'lib' and 'destdir' directories 
for my R packages. It seems to me that 'library()' does handle a custom 
'lib.loc' argument the way it should for an arbitrary package but NOT 
for its dependencies on other packages. The latter are looked for in the 
default lib path (~/R/R-2.x.x/library) and NOT in the custom lib path.

Below is a little code example illustrating the error I'm getting. It'd 
be great if someone could validate this.

Thanks a lot for any comments,
Janko

### CODE EXAMPLE ###

# Package that I'm sure of that it's not already installed and has 
dependencies
pkg <- "rworldmap"

# Making sure that dependencies are not available in the default library
remove.packages("sp")
remove.packages("maptools")
remove.packages("foreign")
remove.packages("lattice")

# Setting custom lib and destdir
path.r.lib <- "C:/temp/R/library"
dir.create(path.r.lib, recursive=TRUE, showWarning=FALSE)
path.r.destdir <- "C:/temp/R/destdir"
dir.create(path.r.destdir, recursive=TRUE, showWarning=FALSE)

# Core processing
try.res <- try(
     eval(substitute(
         library(PKG, lib.loc=path.r.lib, verbose=FALSE),
         list(PKG=pkg)
     )),
     silent=TRUE
)
if(inherits(try.res, "try-error")){
     msg <- c(
         paste("Required package '", pkg, "' not available locally", 
sep=""),
         paste("Looking for package '", pkg, "' in remote repository", 
sep="")
     )
     cat(msg, sep="\n")
     install.packages(
         pkg,
         repos=getOption("repos"),
         lib=path.r.lib,
         destdir=path.r.destdir,
         dependencies="Depends"
     )
     eval(substitute(
         library(PKG, lib.loc=path.r.lib, verbose=FALSE),
         list(PKG=pkg)
     ))
# Here's where the error occurs. Seems to me that 'lib.loc' is not really
# passed on appropriately within 'library()', but instead the default 
lib path
# is used to look for dependencies.
}



[Rd] Bug: argument 'lib.loc' not passed on appropriately in 'library()'?
Janko Thyson