我想提取模型列表的模型调用。该列表包括glm和glmm。
这似乎适用于glm对象,但不适用于glmerMod对象
gm1 <- glm(cbind(incidence, size - incidence) ~ period,
data = cbpp, family = binomial)
gm1$call
>glm(formula = cbind(incidence, size - incidence) ~ period, family = binomial,
data = cbpp)
gm2 <- glmer(cbind(incidence, size - incidence) ~ period + (1 | herd),
data = cbpp, family = binomial)
gm2$call
>Error in gm2$call : $ operator not defined for this S4 class
我可以看到,当我点击rstudio环境窗格中的glmerMod对象时,该对象似乎有一个与之关联的调用值。
是否有一种方法可以使用相同的函数从两种类型的模型中提取此信息?这将是我的首选,因为我希望将其设置为应用于模型列表的lapply函数。
models <- list(gm1, gm2)
calls <- lapply(models, function(x) x$call)
你根本不需要summary()
。
getCall(lmm)
和getCall(lm)
都能工作。(如果你深入研究,你会发现getCall
的默认方法只是getElement(., "call")
;getElement
是一个实用函数,它查找元素,或者列表元素($...
)或S4槽(@...
)。
您可以使用summary(gm2)$call
获得呼叫
我想这样可以:
library(lme4)
head(iris)
lmm<-lmer(Petal.Length~Petal.Width+(1|Species),data=iris)
lm<-lm(Petal.Length~Petal.Width+Species,data=iris)
lm$call
summary(lmm)$call
getcall<-function(x){if(class(x)=="lmerMod"|class(x)=="glmerMod"){return(summary(x)$call)}else{return(x$call)}}
getcall(lm)
## lm(formula = Petal.Length ~ Petal.Width + Species, data = iris)
getcall(lmm)
## glmer(formula = Petal.Length ~ Petal.Width + (1 | Species), data = iris,
family = Gamma)
现在添加lapply
代码:
models <- list(lm, lmm)
calls <- lapply(models, getcall)
calls
## [[1]]
## lm(formula = Petal.Length ~ Petal.Width + Species, data = iris)
## [[2]]
## glmer(formula = Petal.Length ~ Petal.Width + (1 | Species), data = iris,
family = Gamma)