On Thu, 2011-10-06 at 10:00 -0400, Kasper Daniel Hansen wrote: > if you're using two packages that both define a diag function/method > you absolutely _have_ to resolve this using your NAMESPACE. [Update: > I see both are methods. I actually don't know what happens when you > have the same generic in both packages] >
Your response made me look further, with some surprising results. 1. Sequential loading tmt226% R --vanilla R version 2.13.0 (2011-04-13) > library(bdsmatrix) > tmat <- bdsmatrix(c(3,2,2,4), c(22,1,2,21,3,20,19,4,18,17,5,16,15,6,7, 8,14,9,10,13,11,12), matrix(c(1,0,1,1,0,0,1,1,0,1,0,10,0, 0,1,1,0,1,1,0,1,1,0,1,0,10), ncol=2)) > tmat[1:7,1:7] [,1] [,2] [,3] [,4] [,5] [,6] [,7] [1,] 22 1 2 0 0 0 0 [2,] 1 21 3 0 0 0 0 [3,] 2 3 20 0 0 0 0 [4,] 0 0 0 19 4 0 0 [5,] 0 0 0 4 18 0 0 [6,] 0 0 0 0 0 17 5> > diag(tmat) [1] 22 21 20 19 18 17 16 15 14 13 12 10 10 > library(Matrix) Loading required package: lattice Attaching package: 'Matrix' The following object(s) are masked from 'package:base': det > diag(tmat) [1] 22 21 20 19 18 17 16 15 14 13 12 10 10 Things to note: in this case I did not get a message about overwriting the diag method, it works. This was not my experience with ranef(), an S3 generic that coxme, nlme, and lme4 all define; there whichever library loaded last did not discover existing methods. That is, if one loaded nlme after coxme, then ranef(a coxme object) would not dispatch ranef.coxme. Our solution (Doug Bates and I) was to have both coxme and lme4 import ranef and fixef from the nlme library. However, per above it appears to work with S4 generics. Can I count on it though? ------------- Case 2: tmt229% R --vanilla R version 2.13.0 (2011-04-13) > library(coxme) Loading required package: survival Loading required package: splines Loading required package: bdsmatrix Loading required package: nlme Loading required package: Matrix Loading required package: lattice Attaching package: 'Matrix' The following object(s) are masked from 'package:base': det Warning message: replacing previous import ‘diag’ when loading ‘Matrix’ > tmat <- bdsmatrix(c(3,2,2,4), c(22,1,2,21,3,20,19,4,18,17,5,16,15,6,7, 8,14,9,10,13,11,12), matrix(c(1,0,1,1,0,0,1,1,0,1,0,10,0, 0,1,1,0,1,1,0,1,1,0,1,0,10), ncol=2)) >diag(tmat) [1] 22 21 20 19 18 17 16 15 14 13 12 10 10 Things to note: I now get a warning message about diag. Why only here? Per the earlier comment I'm not importing all of nlme, just the two generics It still works (This example isn't reproducable for others: the coxme library on CRAN does not yet have a Matrix dependency.) ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel