On Sat, 6 Mar 2010, Uwe Ligges wrote:
Terry,
this happens since the ranef in coxme is a S3 generic and the one in lme4 is
a S4 generic.
But the packages could be more cooperative. There is also a S3
generic for ranef in package nlme. Ideally the S4 generic in lme4
would have a default method which dispatched on S3 methods: that would
be easy to achieve if there was just one other ranef, but not so if
there are 2 or more -- but read on.
Indeed, the situation is pretty much the same if you load nlme after
coxme:
library(nlme)
Attaching package: 'nlme'
The following object(s) are masked from 'package:coxme':
fixed.effects, fixef, random.effects, ranef
ranef(fit)
Error in UseMethod("ranef") :
no applicable method for 'ranef' applied to an object of class "coxme"
The situation can be alleviated by making S3 methods visible. Thus if
coxme exported coxme:::ranef.coxme and lme4 had a default method
function (object, ...) UseMethod("ranef")
loading lme4 (or nlme) after coxme would work.
My solution would though be NOT to reuse a name that is already
established in another package (nlme has used it for many years).
The design problem is that generic foo() in package B might have
nothing to do with foo() in package A. When it does, we expect B to
import the generic from A, but that can be a 'which came first'
problem unless a base package is involved. But here nlme is a
long-established recommended package, so it would be reasonable to
expect both coxme and lme4 to import from it.
Of course, after loading lme4, you can still use the ranef from coxme:
coxme::ranef(fit)
and get the desired result.
If you write your own code, you might want to use that call explicitly (i.e.
accessing from the correct namepsace). In your own package, you could simply
import the generic from coxme.
Best wishes,
Uwe
On 05.03.2010 17:47, Terry Therneau wrote:
The coxme package has a ranef() method, as does lme4. I'm having
trouble getting them to play together, as shown below. (The particular
model in the example isn't defensible, but uses a standard data set.)
The problem is that most of the time only one of lme4 or coxme will be
loaded, so each needs to define the basic ranef function as well as a
method for it. But when loaded together the last one wins. The coxme
object is an S3 class BTW. (Suggestions to convert it to S4 will not be
well recieved -- but that's a different and unnecessary thread.)
Odds are that this has a simple solution which I have missed.
Terry Therneau
tmt935% R --vanilla
R version 2.10.0 (2009-10-26)
Copyright (C) 2009 The R Foundation for Statistical Computing
ISBN 3-900051-07-0
R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.
Natural language support but running in an English locale
R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.
Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.
library(coxme)
Loading required package: survival
Loading required package: splines
Loading required package: bdsmatrix
fit<- coxme(Surv(time, status) ~ age + (1|ph.ecog), lung)
ranef(fit)
$ph.ecog
Intercept
0.1592346
library(lme4)
Loading required package: Matrix
Loading required package: lattice
Attaching package: 'lme4'
The following object(s) are masked from package:coxme :
fixef,
ranef
ranef(fit)
Error in function (classes, fdef, mtable) :
unable to find an inherited method for function "ranef", for signature
"coxme"
q()
______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel
______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel
--
Brian D. Ripley, rip...@stats.ox.ac.uk
Professor of Applied Statistics, http://www.stats.ox.ac.uk/~ripley/
University of Oxford, Tel: +44 1865 272861 (self)
1 South Parks Road, +44 1865 272866 (PA)
Oxford OX1 3TG, UK Fax: +44 1865 272595
______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel