Search code examples
rlogistf

Loading {logistf} breaks MCMCglmm()


Loading the package logistf breaks MCMCglmm(). Unloading logistf before running the command doesn't remove the error.

Why is that? Is there a way to solve this?

Works

library(MCMCglmm)
#> Loading required package: Matrix
#> Loading required package: coda
#> Loading required package: ape

data(PlodiaPO)
MCMCglmm(PO ~ plate, data = PlodiaPO)
#> 
#>                        MCMC iteration = 0
#> 
#>                        MCMC iteration = 1000
#> 
#>                        MCMC iteration = 2000
#> 
#>                        MCMC iteration = 3000
#> 
[...]
#> attr(,"class")
#> [1] "MCMCglmm"

Created on 2022-06-07 by the reprex package (v2.0.1)

Doesn't work

library(logistf)
library(MCMCglmm)
#> Loading required package: Matrix
#> Loading required package: coda
#> Loading required package: ape

data(PlodiaPO)
MCMCglmm(PO ~ plate, data = PlodiaPO)
#> Error in terms.formula(formula, data = data): invalid term in model formula

unloadNamespace("logistf")
MCMCglmm(PO ~ plate, data = PlodiaPO)
#> Error in terms.formula(formula, data = data): invalid term in model formula

Created on 2022-06-07 by the reprex package (v2.0.1)


Solution

  • After some research i found that the problem not from logistf but it comes from the imported package formula.tools to reproduce the error try :

    library(formula.tools)
    #>formula.tools-1.7.1 - Copyright © 2022 Decision Patterns
    library(MCMCglmm)
    #> Loading required package: Matrix
    #> Loading required package: coda
    #> Loading required package: ape
    
    data(PlodiaPO)
    MCMCglmm(PO ~ plate, data = PlodiaPO)
    
    #> Error in terms.formula(formula, data = data) : 
      invalid term in model formula
    

    and this issue known for formula.tools see Weird package dependency introduces error

    The solution detailed in this issue is:

    • fork fomula.tools repo
    • (remove this line)[https://github.com/decisionpatterns/formula.tools/blob/45b6654e4d8570cbaf1e2fd527652471202d97ad/NAMESPACE#L3]
    • install_github from your repo

    OR

    • run as.character.formula = function(x) as.character.default(x) right after loading formula.tools. That might break code using as.character.formula though (but not sure).

    Thanks for this question