Returns a list with the names of all terms, including response value and random effects, "as is". This means, on-the-fly tranformations or arithmetic expressions like log(), I(), as.factor() etc. are preserved.

find_terms(x, flatten = FALSE, verbose = TRUE, ...)



A fitted model.


Logical, if TRUE, the values are returned as character vector, not as list. Duplicated values are removed.


Toggle warnings.


Currently not used.


A list with (depending on the model) following elements (character vectors):

  • response, the name of the response variable

  • conditional, the names of the predictor variables from the conditional model (as opposed to the zero-inflated part of a model)

  • random, the names of the random effects (grouping factors)

  • zero_inflated, the names of the predictor variables from the zero-inflated part of the model

  • zero_inflated_random, the names of the random effects (grouping factors)

  • dispersion, the name of the dispersion terms

  • instruments, the names of instrumental variables

Returns NULL if no terms could be found (for instance, due to problems in accessing the formula).


The difference to find_variables is that find_terms() may return a variable multiple times in case of multiple transformations (see examples below), while find_variables() returns each variable name only once.


if (require("lme4")) {
  m <- lmer(
    log(Reaction) ~ Days + I(Days^2) + (1 + Days + exp(Days) | Subject),
    data = sleepstudy

#> Warning: Model failed to converge with max|grad| = 14.7145 (tol = 0.002, component 1)
#> Warning: Model is nearly unidentifiable: very large eigenvalue
#>  - Rescale variables?;Model is nearly unidentifiable: large eigenvalue ratio
#>  - Rescale variables?
#> $response
#> [1] "log(Reaction)"
#> $conditional
#> [1] "Days"      "I(Days^2)"
#> $random
#> [1] "Days"      "exp(Days)" "Subject"