A formula 'sub' is a subformula of 'formula' if all the terms on the right hand side of 'sub' are terms of 'formula' and their left hand sides are identical. This package aids in the creation of subformulas.

Subformula constructs the subformulas of a formula object. Use this
to speed up tasks such as model selection and comparison of models.
Install the development version from GitHub with:
# install.packages("devtools")
devtools::install_github("JonasMoss/subformula")
There are two functions in the package, subformula and fapply.
subformulas creates subformulas while fapply is a member of the
apply family tailored for fitting a statistical model for each formula
in a list of formulas.
A formula sub is a subformula of formula if (i) all the terms on
the right hand side of sub are terms of form and (ii) their left
hand sides are identical. subformula finds every subformula of
formula that contains each term in protected.
library("subformula")
formula = mpg ~ wt + gear + cyl
subformula(formula, protected = ~ cyl)
#> [[1]]
#> mpg ~ cyl
#>
#> [[2]]
#> mpg ~ wt + cyl
#>
#> [[3]]
#> mpg ~ gear + cyl
#>
#> [[4]]
#> mpg ~ wt + gear + cyl
Now apply the subformulas to a model function such as lm with
fapply.
models = fapply(subformula(formula, protected = ~ cyl), lm, data = mtcars)
lapply(models, AIC)
#> $`mpg ~ cyl`
#> [1] 169.3064
#>
#> $`mpg ~ wt + cyl`
#> [1] 156.0101
#>
#> $`mpg ~ gear + cyl`
#> [1] 170.7377
#>
#> $`mpg ~ wt + gear + cyl`
#> [1] 157.4991
If you encounter a bug, have a feature request or need some help, open a Github issue. This project follows a Contributor Code of Conduct.