Message-ID: <CAC2h7usz8=K7MRBteyQb_tHozc+2-bL0sgSn43wMtpYLb+CgBA@mail.gmail.com>
Date: 2011-10-06T17:53:00Z
From: Kasper Daniel Hansen
Subject: multiple defines of diag
In-Reply-To: <1317921553.14951.63.camel@nemo>
On Thu, Oct 6, 2011 at 1:19 PM, Terry Therneau <therneau at mayo.edu> wrote:
>
> 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?
My _guess_ is that you cannot depend on this in general. What if the
two generics have different signatures, say one uses x,y and the other
uses x,y,z?
Kasper
>
> -------------
>
> 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.)
>
>
>
>
>
>