如果有以下数据
d = data.frame(out=rnorm(10), explain=rnorm(10), age=rnorm(10), sex=sample(c("M", "F"), size=10, replace=T), group=rep(c(1:5), 2))
f = as.formula("out ~ explain + age + sex + (1|group)")
并希望使用lme4拟合线性模型
require(lme4)
require(lmerTest)
m = lmer(f, d)
s = summary(m)
这很好用......但是如果模型适合像
这样的另一个函数gglm = function(form, data){
lm = lmer(form, data=data)
return(lm)
}
m2 = gglm(f, d)
s2 = summary(m2)
我收到错误。
summary from lme4 is returned
some computational error has occurred in lmerTest
显然,这是因为模型的拟合是使用名为data
的对象完成的,该对象在外部范围内不可见。所以,如果我data = d
,我会得到与以前相同的结果。但是,如果我这样做
data = data.frame(out=rnorm(10), explain=rnorm(10), age=rnorm(10), sex=sample(c("M", "F"), size=10, replace=T), group=rep(c(1:5), 2))
而是获取不同的数据,摘要的结果是错误的。
这似乎不是最好的方法,我认为很容易犯错误。正常lm
及其summary
函数不存在此问题。是不是有办法让lmerTest
摘要不易出错?
答案 0 :(得分:2)
do.call技巧有效(但肯定是一种解决方法)。
gglm = function(form, data){
lm = do.call(lmer, list(formula=form, data=data))
return(lm)
}
m2 = gglm(f, d)
s2 = summary(m2)