在 R 中使用 lmer 函数时,“initializePtr() 中出现错误:包‘Matrix’未提供函数‘cholmod_factor_ldetA’”

Ren*_*Ren 30 r lme4

我正在尝试使用 R 中的 lmer 函数构建混合效应线性回归模型。我正在使用以下代码构建固定效应和混合效应模型,以通过比较 AIC 来证明使用混合效应模型的合理性。我已尝试多次重新加载 lme4 包并在上传之间重新启动(如其他问题中的建议);但是,这并没有解决错误。预先感谢您的任何指导。

    `# generate models
    m0.glm <- glm(SPL ~ 1, family = Gamma, data = CP)
    m0.lmer = lmer(SPL ~ 1 + (1|Lunar), REML = T, data = CP)

    `# compare models
    AIC(logLik(m0.glm))
    AIC(logLik(m0.lmer))

    > m0.glm <- glm(SPL ~ 1, family = Gamma, data = CP)
    > m0.lmer = lmer(SPL ~ 1 + (1|Lunar), REML = T, data = CP)
Run Code Online (Sandbox Code Playgroud)
    Error in initializePtr() : 
      function 'cholmod_factor_ldetA' not provided by package 'Matrix'`
Run Code Online (Sandbox Code Playgroud)

Mik*_*gan 29

Matrix < 1.6-2 和Matrix >= 1.6-2 是二进制不兼容的。当您在它们之间进行更改时,您必须从链接Matrix 的源包重新安装,因此依赖于Matrix ABI

> tools::package_dependencies("Matrix", which = "LinkingTo", reverse = TRUE)[[1L]]
 [1] "ahMLE"               "bayesWatch"          "cplm"               
 [4] "GeneralizedWendland" "hibayes"             "irlba"              
 [7] "lme4"                "mcmcsae"             "OpenMx"             
[10] "PRIMME"              "robustlmm"           "spGARCH"            
[13] "TMB"                 "bcSeq"              
Run Code Online (Sandbox Code Playgroud)

如果您有所需的工具 [1],那么您可以从源重新安装lme4 :

install.packages("lme4", type = "source")
Run Code Online (Sandbox Code Playgroud)

如果没有,那么您需要从存储库安装Matrixlme4的兼容二进制文件。并非所有存储库都提供兼容的二进制文件,但 CRAN 提供[2],因此以下内容在大多数情况下应该有效:

oo <- options(repos = "https://cran.r-project.org/")
install.packages("Matrix")
install.packages("lme4")
options(oo)
Run Code Online (Sandbox Code Playgroud)

请注意,一旦lme4 > 1.1-35.1 发布,所有存储库中的二进制文件将自动重建。此时,update.packages()即使没有显式设置repos.

另请参阅我从 11 月 11 日起在 R-package-devel 邮件列表上发布的公告: https: //stat.ethz.ch/pipermail/r-package-devel/2023q4/010054.html


  1. Windows 用户应安装 RTools,如此处所述;macOS 用户应安装 Xcode 和 GNU Fortran 的命令行工具,如此处所述;Linux 用户应该已经拥有所需的工具。

  2. 适用于 Windows(R 4.2、4.3、4.4)、macOS x86_64(R 4.3)和 macOS arm64(R 4.2、4.3)。


Man*_*pig 7

我收到了同样的错误,但使用 Matrix 的二进制版本(1.5-4)修复了它。

编辑:我对此错误的解决方案如下所述。

博尔克和贾根有更富有洞察力的贡献

remove.packages("Matrix")
install.packages("Matrix")
Run Code Online (Sandbox Code Playgroud)

只需在有关从源安装和编译的弹出窗口中单击“否”即可。

library(matrix)
Run Code Online (Sandbox Code Playgroud)

或者这应该有效

remove.packages("Matrix")
remove.packages("lme4")
install.packages("lme4", type = "source")
library(lme4)
Run Code Online (Sandbox Code Playgroud)

安装 lme4 还将包括 Matrix 包(二进制版本)。

不管你想做什么,只要确保你使用的是 Matrix 包的二进制版本(1.5-4 是最新的)。

  • 我**极其**怀疑 Matrix 版本 1.6-4 中是否存在错误。问题是(我 &gt;99% 确定)来自您正在使用的任何包存储库的二进制文件堆栈中存在二进制*不兼容*。如果遵循@MikaelJagan 的回答*准确地*没有解决问题,我也会感到惊讶。也就是说,将“Matrix”包降级为与其余包兼容的二进制版本绝对是*一个*解决方案...... (2认同)