使用broom整理lmerTest生成的对象失败问题求助
vector: cannot make a vector of mode 'NULL'错误 我之前在R 3.5.x环境下也碰到过一模一样的问题,这本质是旧版本broom包与lmerTest包的类型兼容bug导致的——broom早期版本对lmerTest生成的lmerModLmerTest类对象的处理逻辑有缺陷,而lme4原生的lmerMod对象不在这个问题范围内。下面给你几个可行的修复方案:
方案1:升级到兼容版本的broom包
这是最彻底的解决办法。由于你的R版本是3.5.0(属于较旧的版本),直接安装CRAN最新版broom可能会不兼容,建议安装适配R 3.5.x的broom稳定版本(比如0.5.2,这个版本修复了lmerTest对象的处理问题):
# 先卸载旧版broom remove.packages("broom") # 安装指定兼容版本 install.packages("devtools") library(devtools) install_version("broom", version = "0.5.2", repos = "http://cran.us.r-project.org")
安装完成后重新运行你的代码,应该就能正常用tidy(lmm1)输出结果了。
方案2:临时转换对象类型(应急用)
如果暂时无法升级包,可以把lmerTest生成的对象转换成lme4的lmerMod类型,让broom能正常处理,之后再手动补充lmerTest提供的p值:
library(lmerTest) data(sleepstudy) lmm1 <- lmer(Reaction ~ Days + (Days | Subject), sleepstudy) # 转换对象类型为lme4的lmerMod class(lmm1) <- "lmerMod" # 用broom整理结果 tidy_result <- tidy(lmm1) # 提取lmerTest的p值并合并到结果中 lmer_sum <- summary(lmm1) coeff_pvals <- lmer_sum$coefficients[, "Pr(>|t|)"] tidy_result$p.value <- coeff_pvals[match(tidy_result$term, names(coeff_pvals))] # 查看最终结果 tidy_result
这个方法既能保留broom的整理格式,又能拿到lmerTest的显著性检验结果。
方案3:同步升级lmerTest包
有时候问题也可能是lmerTest版本过旧导致的,建议同时安装适配R 3.5.0的lmerTest版本(比如3.1-0):
install_version("lmerTest", version = "3.1-0", repos = "http://cran.us.r-project.org")
问题原因解释
旧版本的broom在解析lmerTest的lmerModLmerTest对象时,内部函数尝试创建一个mode = NULL的向量,这在R中是不允许的,因此触发了vector: cannot make a vector of mode 'NULL'错误。而lme4的lmerMod是broom最初支持的对象类型,所以没有这个问题。后续broom版本修复了对lmerModLmerTest类的处理逻辑,升级后就能正常兼容。
内容的提问来源于stack exchange,提问作者Benjamin Telkamp

