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

为何使用future与rsample进行并行Bootstrap时执行失败?

解决future并行结合rsample Bootstrap的转换报错问题

问题根源

future的multisession采用独立进程运行,和parallel::mclapply的fork模式不同——fork会直接继承父进程的所有数据环境,而独立进程无法自动解析rsplit/boot_split对象的索引引用。这类对象本身不是完整数据框,只是指向原始数据的索引,在独立进程里无法自动转换成数据框,所以触发as.data.frame报错。而顺序执行和fork模式下,进程能直接访问原始数据集,索引可以正常映射,因此不会出问题。

修复方案

修改自定义函数,用rsample::analysis()显式提取rsplit对象里的训练数据,不要直接把rsplit传给lm的data参数。

完整可运行代码

library(rsample)
library(broom)
library(purrr)
library(furrr)
library(future.apply)
plan(multisession)

# 生成Bootstrap样本
splits <- rsample::bootstraps(mtcars, times = 1000)

# 修正后的拟合函数:显式提取数据
fit <- \(d) tidy(lm(mpg ~ wt, data = analysis(d)))

# 使用future_map并行执行
splits$estimates <- future_map(splits$splits, fit)

# 或者用future_lapply
# splits$estimates <- future_lapply(splits$splits, fit)

# 汇总Bootstrap结果
int_pctl(splits, estimates)

补充说明

  • 顺序执行和mclapply无需额外处理,是因为它们的执行上下文能直接访问mtcars原始数据,rsplit的索引可以直接对应到原始数据行。
  • multisession的每个子进程是独立的,没有父进程的原始数据环境,必须通过analysis()把rsplit里的训练数据提取出来,才能让lm正确读取数据进行拟合。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 02:21:10