我正在尝试通过
lapply
循环将来自lme4包的(gl)merMod
对象和effects包中的effect
函数一起传递,但遇到了意外的错误。似乎effect
函数无法在循环内查找对象。我做错了什么,如何使循环正常工作而不必手动将数据框放入工作区间?
library(lme4)
library(reshape2)
library(effects)
dat <- data.frame(var = rep(c("A", "B", "C"), 100), treat = rep(c("T1", "T2"),
each = 150), rand = rep(c("B", "C", "A"), 100), value = rep(c(1,0), 150))
lapply(levels(dat$treat), function(k) {
y <- subset(dat, treat == k)
mod <- glmer(value ~ var + (1|rand), data = y, family = binomial)
})
## Works
lapply(levels(dat$treat), function(k) {
y <- subset(dat, treat == k)
mod <- glmer(value ~ var + (1|rand), data = y, family = binomial)
effects::effect("var", mod)
})
## Error in is.data.frame(data) : object 'y' not found
y <- subset(dat, treat == "T1")
mod <- glmer(value ~ var + (1|rand), data = y, family = binomial)
effects::effect("var", mod)
## Works
lapply(levels(dat$treat), function(k) {
y <- subset(dat, treat == k)
mod <- glmer(value ~ var + (1|rand), data = y, family = binomial)
effects::effect("var", mod)
})
## Works, because object y is in the workspace
lapply(levels(dat$treat), function(k) { y <- subset(dat, treat == k) mod <- glm(value ~ var , data = y, family = binomial) effects::effect("var", mod) })
因此,这可能是effects包与glmer结合使用的特定问题。 - mallerlme4
的问题...我编辑了我的问题。顺便说一下,lapply(levels(dat$treat), function(k) {y <- subset(dat, treat == k); mod <- lmer(value ~ var + (1|rand), data = y); effects::effect("var", mod)})
会产生错误。 - Mikkoeffects
,则会出现类似的错误。对于这种情况,替代-解析技巧似乎可以解决问题。但是,对于此示例无效。https://dev59.com/YW3Xa4cB1Zd3GeqPaxUJ - Mikko