使用effects包循环glmer函数时出现意外错误
我试图将包中的使用effects包循环glmer函数时出现意外错误,r,model,lapply,lme4,R,Model,Lapply,Lme4,我试图将包中的effect函数与包中的(gl)merMod对象一起通过lappy循环传递,但遇到了一个我预料不到的错误。effect函数似乎无法在循环中查找对象我做错了什么?如何在不将数据框手动放入工作区的情况下使循环正常工作? library(lme4) library(reshape2) library(effects) dat <- data.frame(var = rep(c("A", "B", "C"), 100), treat = rep(c("T1", "T2"), eac
effect
函数与包中的(gl)merMod
对象一起通过lappy
循环传递,但遇到了一个我预料不到的错误。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
库(lme4)
图书馆(E2)
图书馆(效果)
dat我有一个类似的问题(将lm与model.matrix一起使用),在这个问题上,效果本身工作得很好,但在我的lappy循环中却不起作用
我尝试用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)
}
for(k级(dat$treat)){
这显然不是解决方案,但使用glm()模型对我很有效:lappy(levels(dat$treat),function(k){y@maller谢谢!这是一个lme4
问题……我编辑了我的问题。顺便说一句,lappy(levels(dat$treat),function(k){y您可能想查看,但我无法找到解释如果您尝试在函数中使用效果
,则会发生类似错误。对于这种特殊情况,替换deparse技巧似乎可以解决问题。但是,对于此示例不起作用。