我在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,BLUP等。
答案 0 :(得分:4)
我这样做了,可能会更好
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)
})
这里有你想要的所有变量的模型列表
答案 1 :(得分:1)
另一种方法是替换你的行:
model1 = lmer(varname ~ + (1 | par1) + (1 | par2), data=df)
带
model1 = lmer(paste0(varname," ~ + (1 | par1) + (1 | par2)"), data=df)
这会将公式作为字符串传递,lmer(...)
将强制转换为公式。
答案 2 :(得分:0)
这是另一种方法..似乎有点复杂..但我想我会添加它的完整性: R: analyzing multiple responses (i.e. dependent variables) in a mixed effects model (lme4)