[R] conflict of package "Matrix" and summary of lme object
Martin Maechler
maechler at stat.math.ethz.ch
Mon Jul 24 15:41:52 CEST 2006
>>>>> "Dirk" == Dirk Enzmann <dirk.enzmann at uni-hamburg.de>
>>>>> on Mon, 24 Jul 2006 13:55:44 +0200 writes:
Dirk> After loading the package "Matrix" (version 0.995-12),
Dirk> using the summary function with an lme (package nlme
Dirk> version 3.1-75) object results in an error message
Dirk> saying
Dirk> Fehler in dim(x) : kein Slot des Namens "Dim" für
Dirk> dieses Objekt der Klasse "correlation"
Dirk> (translated: 'Error in dim(x) : no slot of the name
Dirk> "Dim" for this object of class "correlation")'.
Dirk> Without loading "Matrix" this error message does not
Dirk> occur.
Dirk> Any ideas?
Yes. Thank you for the report.
The error happens when PRINTing a summary.lme object,
i.e.,
ssl <- summary(<lme> ) ## works fine
ssl ##-> gives the error
The short answer:
Don't use 'Matrix' together with 'nlme' for the time being
(but rather use 'lme4' and lmer() if possible)
A long answer:
The problem happens because
'Matrix' defines a (S4) class "correlation" (which inherits from
"dpoMatrix"). Hence dim( <correlation> ) is accessing the
'Dim' slot of the <correlation> object --- which obviously
must fail for that part of a "summary.lme" object which is not
a proper S4 object at all.
Here is reproducible example of showing the problem without even
doing an nlme related thing:
> x <- round(cor(matrix(rnorm(100), 20,5)),2); class(x) <- "correlation" ; x
[,1] [,2] [,3] [,4] [,5]
[1,] 1.00 -0.29 -0.07 -0.11 0.03
[2,] -0.29 1.00 0.10 -0.02 0.20
[3,] -0.07 0.10 1.00 0.05 0.13
[4,] -0.11 -0.02 0.05 1.00 -0.21
[5,] 0.03 0.20 0.13 -0.21 1.00
attr(,"class")
[1] "correlation"
> dim(x)
[1] 5 5
> library(Matrix)
Loading required package: lattice
> dim(x)
Error in dim(x) : no slot of name "Dim" for this object of class "correlation"
> dim
.Primitive("dim")
> showMethods(dim)
Function "dim":
x = "ANY"
x = "Matrix"
x = "correlation"
(inherited from x = "Matrix")
> showClass("correlation")
Slots:
Name: sd x Dim Dimnames uplo factors
Class: numeric numeric integer list character list
Extends:
Class "dpoMatrix", directly
Class "dsyMatrix", by class "dpoMatrix"
Class "ddenseMatrix", by class "dpoMatrix"
Class "symmetricMatrix", by class "dpoMatrix"
Class "dMatrix", by class "dpoMatrix"
Class "denseMatrix", by class "dpoMatrix"
Class "Matrix", by class "dpoMatrix"
Class "Matrix", by class "dpoMatrix"
Class "compMatrix", by class "dpoMatrix"
Class "Matrix", by class "dpoMatrix"
>
A workaround -- not for you but the authors of 'Matrix' and/or 'nlme' --
is for one of the two packages to call the class differently.
At the moment, I tend to do the change in 'nlme', since there,
the "correlation" class has been almost entirely hidden from the user.
A workaround for you: Redefine print.summary.lme, e.g., by
commenting the line
class(corr) <- "correlation"
Regards,
Martin
More information about the R-help
mailing list