如何使用lmer为df中的多个变量(列)运行模型

如何使用lmer为df中的多个变量(列)运行模型,r,function,lmer,R,Function,Lmer,在df中我有几个变量(列),我想运行lmer(来自lme4包)。 假设我有一个名为df的数据帧: par1 par2 resp1 resp2 plant1 rep1 3 8 plant2 rep2 5 2 ... 我正试图编写一个函数来实现这一点,但在传递参数和在函数中使用参数时遇到了问题 model1 = function(df, varname){ library(lme4) model1 = lmer(varname ~ + (1 | par1) + (1 |

在df中我有几个变量(列),我想运行lmer(来自lme4包)。
假设我有一个名为df的数据帧:

par1   par2 resp1 resp2
plant1 rep1 3     8
plant2 rep2 5     2
...
我正试图编写一个函数来实现这一点,但在传递参数和在函数中使用参数时遇到了问题

model1 = function(df, varname){
  library(lme4)
  model1 = lmer(varname ~ + (1 | par1) + (1 | par2), data=df)
  return(model1)
}

resp1model = model1(df, "resp1")
resp2model = model1(df, "resp2")
有人能建议最好的方法吗?也许函数不是答案?一圈?
我应该说原因是,一旦我让函数工作,我希望函数从模型返回其他东西。。比如AIC、BLUPs等等。我这样做,可能会更好

varlist=names(df)[i:j] #define what vars you want

blups.models <- lapply(varlist, function(x) {
  lmer(substitute(i ~ (1|par1)+(1|par2)+(1|par3), list(i = as.name(x))), data = df, na.action=na.exclude)
})
varlist=names(df)[i:j]#定义所需的变量

blups.models另一种方法是替换您的产品线:

model1 = lmer(varname ~ + (1 | par1) + (1 | par2), data=df)


这将以字符串形式传递公式,而
lmer(…)
将强制传递公式。

这里是另一种方法。。看起来有点复杂。。但为了完整起见,我想添加它:

表格谢谢!这些建议帮助修复了我的原始代码,但我认为我最好使用@AnantaHmm建议的列表方法。为什么?我想我更喜欢这种解决方案——在我看来,使用这种语言(即
substitute()
)进行计算总是会带来更多潜在的复杂性,因此除非我绝对需要它,否则我会避免使用它……制作一个变量名列表并将数据存储在一个模型对象列表中似乎更容易使用。。然后我可以使用Lappy对列表中的每个模型执行操作。。除非我误解了你的建议?
model1 = lmer(paste0(varname," ~ + (1 | par1) + (1 | par2)"), data=df)