gpt4 book ai didi

r - 使用效果包循环 glmer 函数时出现意外错误

转载 作者:行者123 更新时间:2023-12-01 03:21:00 27 4
gpt4 key购买 nike

我正在尝试通过 effect来自 effects 的函数与 (gl)merMod 一起打包来自 lme4 的对象包通过lapply循环并遇到我不期望的错误。看来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)
}

关于r - 使用效果包循环 glmer 函数时出现意外错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45050029/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com