Как использовать lmer внутри функции

Я пытаюсь написать функцию, которая собирает некоторые вызовы, которые я часто использую в сценариях
Я использую данные сна в пакете lme4 в моих примерах
Вот (упрощенная версия) функция, с которой я начал:

trimModel1 <- function(frm, df) {
  require(LMERConvenienceFunctions)
  require(lme4)

  lm<-lmer(frm,data=df)
  lm.trimmed = romr.fnc(lm, df)
  df = lm.trimmed$data
  # update initial model on trimmed data
  lm<-lmer(frm,data=df)
#   lm@call$formula<-frm
  mcp.fnc(lm)
  lm
}

Когда я вызываю эту функцию, как показано ниже:

(fm1<-trimModel1(Reaction ~ Days + (Days|Subject),sleepstudy))

Первые три строки вывода выглядят так:

Linear mixed model fit by REML 
Formula: frm    
Data: df

Если бы я вызывал команды функции trimModel1 в консоли, первые три строки сводки модели выглядят так:

Linear mixed model fit by REML 
Formula: Reaction ~ Days + (Days | Subject) 
   Data: sleepstudy 

Разница в том, что несколько пакетов, использующих пакет lme4, используют поля формулы и данных. Например, пакет эффектов использует эти поля, и команда, подобная приведенной ниже, не будет работать, когда я использую функцию trimModel1, описанную выше:

library(effects)
plot(allEffects(fm1))

Я оглянулся на дискуссионные группы StackOverflow и R и нашел, что вы можете изменить поле формулы модели. Если вы раскомментируетеlm@call$formula<-frm строка в функции trimModel1 поле формулы в сводке отображается корректно. К сожалению, когда я запускаю функцию из пакета эффектов, я все равно получаю сообщение об ошибке:

Error in terms.formula(formula, data = data) : 
  'data' argument is of the wrong type

Это потому, что поле данных по-прежнему неверно.
Другое возможное решение, которое я нашел, - эта функция:

trimModel2 <- function(frm, df) {
  require(LMERConvenienceFunctions)
  require(lme4)

  lm<-do.call("lmer",list(frm,data=df))
  lm.trimmed = romr.fnc(lm, df)
  df = lm.trimmed$data
  # update initial model on trimmed data
  lm<-do.call("lmer",list(frm,data=df))
  mcp.fnc(lm)
  lm
}

Когда я сейчас набираю в консоли следующие команды, я не получаю ошибок:

(fm2<-trimModel2(Reaction ~ Days + (Days|Subject),sleepstudy))
plot(allEffects(fm2))

Функция allEffects работает, но теперь проблема заключается в том, что сводка модели fm2 отображает необработанные данные исследования сна. Это не является большой проблемой для данных о состоянии сна, но с очень большими наборами данных иногда происходит сбой Rstudio при отображении модели.
Кто-нибудь знает, как заставить одну (или обе) из этих функций работать правильно?
Я думаю, что мне нужно изменить поле данных fm1 @ call $, но я не знаю как.

Ответы на вопрос(1)

Ваш ответ на вопрос