判断公式是否包含随机效应的最佳方法?

ADF*_*ADF 3 r function lme4 lm

我有一个公式列表,我想使用函数将其放入循环中。其中一些公式是随机效应模型,另一些是简单的线性模型。我希望该函数检测模型是否包含随机效应,如果包含,则用于lmer()拟合模型。否则,应该使用lm(). 有关如何检查此条件的任何建议(除了将公式转换为字符串并检查括号之外)?在这个阶段,他们有相同的班级,所以我不能只检查这一点。我还可以使用错误处理来捕获lmer()从模型返回错误时没有随机效果并重新路由到常规lm(),但这似乎也不必要地混乱。

下面的例子:

fit_models <- function(formula_list) {
  models <- list()
    for(ii in seq_along(formula_list)) {
      if(formula_list[[ii]] is lmer) { # Enter condition here
        print("lmer")
      } else {
        print("lm")
      }
  }
}

f1 <- formula(y ~ x)
f2 <- formula(y ~ 1 + x + (1 + x | z))
formulas <- c(f1, f2)

fit_models(formulas)
Run Code Online (Sandbox Code Playgroud)

Ben*_*ker 5

我会说

length(lme4::findbars(f))>0
Run Code Online (Sandbox Code Playgroud)

应该可靠地检测包含随机效应成分的公式(在某种意义上lme4)。

从混合效应模型公式的右侧,确定由竖线运算符分隔的表达式对。

这是(隐式)在代码中完成的测试lme4在这里......