[Rd] Problem loading package with version, S4 classes and NAMESPACE

Roger Bivand Roger.Bivand at nhh.no
Fri Jan 20 21:23:28 CET 2006


On Fri, 20 Jan 2006, Roger Bivand wrote:

> I've run into a problem that I hope has an obvious solution. The sp 
> package uses S4 classes and has a NAMESPACE, and when installed without 
> package versions, runs OK, passes R CMD check, and so on.
> 
> A user reported that he installed it  --with-package-versions, and that 
> from then on it would fail at first use of a class defined in the package.

Further to my question, hardcoding the package= argument to the versioned
package name string in setClass() removes the problem when installing with
versions (for that version), but creates the reverse problem if installed
(by default) without versions:

> library(S4nswv)
> xyd <- new("xyloc", x=runif(20), y=runif(20))
Loading required package: S4nswv_0.1-1
Error in .requirePackage(package) : unable to find required package 
'S4nswv_0.1-1'
In addition: Warning message:
there is no package called 'S4nswv', version 0.1-1 in: library(package, 
character.only = TRUE, logical = TRUE, warn.conflicts = warn.conflicts,  
Error in initialize(value, ...) : S language method selection got an error 
when called from internal dispatch for function 'initialize'

The default for the package argument is getPackageName(where), and where = 
topenv(parent.frame()). There are comments in methods/R/packageName.R 
suggesting that the hidden object .packageName is being made invisible by 
NAMESPACE.

It looks as though R_PACKAGE_NAME as a shell variable could be used to 
smuggle the correct string in, but I'm not sure what order things happen 
in.

> 
> I've reconstructed the problem in a skeletal package:
> 
> http://reclus.nhh.no/R/etc/S4nswv_0.1-1.tar.gz
> 
> which when installed without versions works:
> 
> $ R CMD INSTALL S4nswv
> $ R
> ...
> > library(S4nswv)
> > sessionInfo()
> R version 2.2.1, 2005-12-20, i686-pc-linux-gnu 
> 
> attached base packages:
> [1] "methods"   "stats"     "graphics"  "grDevices" "utils"     "datasets" 
> [7] "base"     
> 
> other attached packages:
>  S4nswv 
> "0.1-1" 
> > xyd <- new("xyloc", x=runif(20), y=runif(20))
> > xyd
>                x           y         res
>  [1,] 0.01589694 0.935594239 -0.91969730
>  [2,] 0.56974225 0.120906481  0.44883577
> ...
> 
> but fails after INSTALL --with-package-versions S4nswv
> 
> > library(S4nswv)
> > sessionInfo()
> R version 2.2.1, 2005-12-20, i686-pc-linux-gnu 
> 
> attached base packages:
> [1] "methods"   "stats"     "graphics"  "grDevices" "utils"     
> "datasets" 
> [7] "base"     
> 
> other attached packages:
> S4nswv_0.1-1 
>      "0.1-1" 
> > xyd <- new("xyloc", x=runif(20), y=runif(20))
> Error in as.environment(pkg) : no item called "package:S4nswv" on the 
> search list
> Error in initialize(value, ...) : S language method selection got an error 
> when called from internal dispatch for function 'initialize'
> > traceback()
> 2: initialize(value, ...)
> 1: new("xyloc", x = runif(20), y = runif(20))
> 
> This suggests that "package:S4nswv" and its versioned equivalent are not 
> being associated, and I'd be grateful for pointers about how to do this. 
> 
> Removing the NAMESPACE, and uncommenting .First.lib() in R/zzz.R removes 
> the problem, that is the skeletal package works --with-package-versions, 
> but this isn't an option.
> 
> At present, the methods package is invoked in DESCRIPTION in the Depends:  
> field, by "import(methods)" in NAMESPACE, and by
> 
> .onLoad <- function(lib, pkg) require(methods)
> 
> in zzz.R, which feels like overkill, but removing them one-by-one doesn't 
> seem to affect the problem.
> 
> (I don't think this is the same problem as Seth's)
> 
> Roger
> 
> 

-- 
Roger Bivand
Economic Geography Section, Department of Economics, Norwegian School of
Economics and Business Administration, Helleveien 30, N-5045 Bergen,
Norway. voice: +47 55 95 93 55; fax +47 55 95 95 43
e-mail: Roger.Bivand at nhh.no



More information about the R-devel mailing list