You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R中tidy函数在future_map内调用处理lmerMod对象报错如何解决?

报错诱因

你使用的multisession并行模式会启动独立的后台R工作进程,这类进程默认不会继承主进程加载的R包命名空间。你的fun1函数依赖多个扩展包的特定方法,子进程未预加载对应包时就会触发报错:

  • 针对lmerMod/merMod类对象的tidy()方法由broom.mixed包提供,基础broom包本身不支持lmer类的tidy转换,子进程未加载broom.mixed时就找不到适配的方法
  • 此外fun1用到的lmer()来自lme4包、analysis()来自rsample包、管道符%>%来自dplyr/magrittr包,这些依赖也需要子进程可调用
    原本的map()是在主进程串行运行,主进程已经加载了所有需要的包,因此运行正常。
解决方法

方法1:显式声明子进程需要加载的包

在future_map的参数中指定子进程需要预加载的依赖包即可,修改最后一步的mutate代码:

# furrr 2.0+ 版本写法
mutate(model = future_map(splits, fun1, .options = furrr_options(packages = c("lme4", "broom.mixed", "rsample", "dplyr"))))

# 旧版本furrr写法
mutate(model = future_map(splits, fun1, .packages = c("lme4", "broom.mixed", "rsample", "dplyr")))

方法2:自定义函数内显式指定包名前缀

直接在fun1里给每个函数加上所属包的前缀,不需要额外配置并行参数,兼容性更强:

fun1 <- function(data) {
    data %>% 
      rsample::analysis() %>%
      lme4::lmer(val ~ period + (1 | id), data = .) %>% 
      broom.mixed::tidy()
 }

只要子进程环境中已经安装了对应包,就能正常运行。

方法3:更换并行模式(仅适用于Linux/macOS)

如果你的运行环境不是Windows,可以把并行计划替换为plan(multicore),该模式下子进程会完全继承主进程的工作环境和已加载的包,不需要额外配置即可正常运行。

内容的提问来源于stack exchange,提问作者YanLi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 00:09:02