[R-pkg-devel] Error when install binary from CRAN but not if install from source - Macintosh, lme4, Matrix, buildmer

Martin Maechler m@ech|er @end|ng |rom @t@t@m@th@ethz@ch
Thu Oct 20 11:41:45 CEST 2022


>>>>> Duncan Murdoch 
>>>>>     on Wed, 19 Oct 2022 14:55:24 -0400 writes:

    > It seems that this could be mostly avoided if instead of caching copies 
    > of Matrix methods when buildmer was installed, R would cache promises to 
    > get those methods.  Then if the method for some particular signature 
    > changed, on first use buildmer would retrieve the current version.

    > There would still be a problem if Matrix completely dropped a method or 
    > it migrated to a different package, but I think that's less frequent 
    > than a change to the internal implementation.

    > Has any thought been given to making this change for R 4.3.0?

    > Duncan Murdoch

Not that I know of.

It sounds like a very promising (pun! ;-) idea, that could solve
many subtle  inter-package installation/update  problems.

Note that the methods *and* classes  caching had been introduced
a longer while ago as part of a concerted effort to make the
loading of packages with (many) S4 methods and classes considerably faster.

Before that effort, all these class and method "tables"/"lists"
(environments effectively) were (re-)computed at package load
time which was quite costly [time consuming].
I was not very much involved in that effort and I don't know if
using promises instead had been considered at the time.

(I've added Michael and the other Martin M to the CC , hoping
 they will know / remember more )

Martin Maechler


    > On 19/10/2022 3:39 a.m., Martin Maechler wrote:
    >>>>>>> Duncan Murdoch
    >>>>>>> on Tue, 18 Oct 2022 15:17:33 -0400 writes:
    >> 
    >> > I see the same thing.  This sounds like a problem in the handling of
    >> > methods that has been discussed somewhat recently:
    >> 
    >> > https://stat.ethz.ch/pipermail/r-devel/2022-September/081971.html
    >> 
    >> > The problem is that when the binary is built, some code from other
    >> > packages is kept as part of it.  When that other package is updated, you
    >> > need a new source install of your own package (or a rebuild at CRAN to
    >> > replace the binary) to cache the new code.
    >> 
    >> > This can also be done explicitly by package startup code; I think this
    >> > thread
    >> 
    >> > https://stat.ethz.ch/pipermail/r-package-devel/2022q3/008481.html
    >> 
    >> > turned out to be a case where rstan was caching something, and an update
    >> > to ggplot2 didn't work with the cached data.  Given the error message,
    >> > your issue sounds more like the first one.
    >> 
    >> > I don't recall if there was a resolution.  Maybe you can ask the CRAN
    >> > maintainers to rebuild buildmer.
    >> 
    >> > Duncan Murdoch
    >> 
    >> Yes, thank you, Duncan!
    >> 
    >> The binary version of 'buildmer' (or also lme4 ?) must have been created
    >> with an older version of Matrix  (which did not have the
    >> dgeMatrix_getDiag C code)  and the respective maintainer of the
    >> binary builds (*) must rebuild the binary versions of those
    >> Matrix-reverse-dependant packages,
    >> ---
    >> *) in this case the macOS ones (both for Intel and ARM Macs)
    >> 
    >> Martin Maechler
    >> (maintainer of Matrix)
    >> 
    >> 
    >> 
    >> 
    >> 
    >> 
    >> 
    >> 
    >> > On 18/10/2022 2:51 p.m., Carl Schwarz wrote:
    >> >> I've run into a problem where if you install the lme4, Matrix, and buildmer
    >> >> packages using the binaries from CRAN on a Mac, I get an error message
    >> >> about a missing method, but if I install the same packages from SOURCE, the
    >> >> code runs fine.
    >> >>
    >> >> I would have thought that installing from source or using the binary
    >> >> should look the same.
    >> >>
    >> >> Any suggestions on how to proceed to resolve this issue?
    >> >>
    >> >> The maintainer of buildmer is also puzzled.
    >> >> You can follow the issue in more detail at:
    >> >> https://github.com/cvoeten/buildmer/issues/20
    >> >>
    >> >> This is way above my paygrade...
    >> >>
    >> >> Carl Schwarz
    >> >>
    >> >> ------------------------------------------------------
    >> >>
    >> >> Tried this on an intel-Mac and arm-Mac with the same result.
    >> >> Works fine on Windows machines under both scenarios.
    >> >>
    >> >> Here is a test example
    >> >>
    >> >> library(buildmer)
    >> >> library(lme4)
    >> >>
    >> >> nrow <- 100
    >> >>
    >> >> test <- data.frame(x01=runif(nrow),
    >> >> y=runif(nrow)<.1, block=as.factor(floor((1:nrow)/50)))
    >> >> head(test)
    >> >>
    >> >>
    >> >> fit.model <- lme4::glmer(y~x01 + (1|block), data=test,
    >> >> family=binomial(link="logit"))
    >> >> fit.model # this works
    >> >>
    >> >> class(fit.model)
    >> >>
    >> >> summary(fit.model)
    >> >> # gives the following error message
    >> >> Error in diag(from, names = FALSE) : object 'dgeMatrix_getDiag' not found
    >> >>
    >> >> A pdf document showing output is attached (shows the sessionInfo etc).
    >> >>
    >> >> When you install the buildmer and Matrix packages from SOURCE, it runs fine.
    >> >>
    >> >> I've tried all combinations of installing binary/source and only if both
    >> >> packages (Matrix and buidmer) are installed from source, does the code run.
    >> >>
    >> >> Same issue on an intel-Mac.
    >> >> Same issue when running under the R directly rather than Rstudio on a Mac.



More information about the R-package-devel mailing list