使用效果包循环 glmer 函数时出现意外错误
Unexpected error when looping the glmer function with the effects package
我试图通过 lapply
循环传递 effects package together with a (gl)merMod
object from the lme4 包中的 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
我有一个类似的问题(将 lm 与 model.matrix 一起使用),其中效果器本身运行良好,但在我的 lapply 循环中不起作用。
我尝试用 for 循环重写我的代码,这解决了我的问题。由于 for 循环每次都将对象分配给全局环境,因此您不必手动将它们放置在那里。
对于您的示例,for 循环不会引发错误,但现在您需要将输出分配给某些东西:
for(k in levels(dat$treat)) {
y <- subset(dat, treat == k)
mod <- glmer(value ~ var + (1|rand), data = y, family = binomial)
effects::effect("var", mod)
}
我试图通过 lapply
循环传递 effects package together with a (gl)merMod
object from the lme4 包中的 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
我有一个类似的问题(将 lm 与 model.matrix 一起使用),其中效果器本身运行良好,但在我的 lapply 循环中不起作用。
我尝试用 for 循环重写我的代码,这解决了我的问题。由于 for 循环每次都将对象分配给全局环境,因此您不必手动将它们放置在那里。
对于您的示例,for 循环不会引发错误,但现在您需要将输出分配给某些东西:
for(k in levels(dat$treat)) {
y <- subset(dat, treat == k)
mod <- glmer(value ~ var + (1|rand), data = y, family = binomial)
effects::effect("var", mod)
}