R Package conflict between gam and mgcv?

Detaching packages in R not good practice (see ?detach ), but for some reason I have to switch between gam and mgcv . After mgcv been attached and disconnected (and all dependencies in the namespace are not loaded!), The gam functions cause some strange errors (please forgive the terminology). It seems that, despite the fact that it was unloaded one step earlier - mgcv , and friends return to the namespace, and the dispatch function goes wrong. Has anyone had the same problem before?

 # fresh session t.s1 <- search() t.lN1 <- loadedNamespaces() # some dummy data data <-data.frame(is.exc=sample(x=c(0,1),size=100,replace=T), year=1:100,doy=rep(1:5,times=20)) t.dof <- 2 # everything works fine library(gam) t.gam1 <- gam::gam(is.exc~s(year,df=t.dof)+s(doy,df=t.dof),data=data,family=poisson) t.pred1 <- gam::predict.gam(t.gam1,newdata=data,type='terms') detach('package:gam',unload=T,character.only=T) detach('package:splines',unload=T,character.only=T) # compare attached packages and namespaces with fresh session t.s2 <- search() t.lN2 <- loadedNamespaces() identical(t.s1,t.s2) identical(t.lN1,t.lN2) # attach and detach mgcv library(mgcv) detach('package:mgcv',unload=T,character.only=T) unloadNamespace('nlme') unloadNamespace('Matrix') unloadNamespace('lattice') unloadNamespace('grid') # compare again attached packages and namespaces with fresh session t.s2 <- search() t.lN2 <- loadedNamespaces() identical(t.s1,t.s2) identical(t.lN1,t.lN2) # use package gam again and produce errors library(gam) t.gam2 <- gam::gam(is.exc~s(year,df=t.dof)+s(doy,df=t.dof),data=data,family=poisson) gam::summary.gam(t.gam2) t.pred2 <- gam::predict.gam(t.gam2,newdata=data,type='terms') # why do we have mgcv and friends in the namespace? loadedNamespaces() 

Information about my session (new session):

 R version 3.0.2 (2013-09-25) Platform: x86_64-pc-linux-gnu (64-bit) locale: [1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8 [5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8 LC_PAPER=en_US.UTF-8 LC_NAME=C [9] LC_ADDRESS=C LC_TELEPHONE=C LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C attached base packages: [1] stats graphics grDevices utils datasets methods base loaded via a namespace (and not attached): [1] tools_3.0.2 

and I use the latest versions of gam (1.09) and mgcv (1.7-28). Any hints are welcome!

+6
source share
1 answer

The problem, since you DETECTED, is that both the gam and mgcv packages set S3 methods for gam objects. But, as indicated in the documentation for disconnecting:

registered S3 methods from the namespace will not be deleted.

So, in your case, it’s easy to understand that this is the cause of your problems:

 library(gam) # installs gam::print.summary.gam identical(getS3method('print', 'summary.gam'), gam:::print.summary.gam) [1] TRUE library(mgcv) # installs mgcv::print.summary.gam identical(getS3method('print', 'summary.gam'), mgcv:::print.summary.gam) [1] TRUE # save a pointer before unloading namespaces mgcv_psgam <- mgcv:::print.summary.gam detach('package:mgcv',unload = TRUE, character.only = TRUE) # after the detach, the method from mgcv is still installed !!! identical(getS3method('print', 'summary.gam'), mgcv_psgam) [1] TRUE 

Conclusion: make sure you never download mgcv

+4
source

All Articles