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

foreach并行循环仅添加print语句才得预期结果,这正常吗?

问题:foreach并行循环中有无print语句导致结果差异是否正常?

我在用foreach做代码并行化处理时发现,循环末尾是否添加print语句会导致输出结果完全不同:

  • 添加print语句时,能得到预期的包含lambda、mtry、nodsize、rmse列的数据框;
  • 不添加时,仅返回一个只包含"foo"的结果矩阵。

添加print语句的代码及结果

library(foreach)

grid <- expand.grid(
  lambda=c(1,2),
  mtry=c(1),
  nodsize=c(1)
)

n.cores <- parallel::detectCores() - 1
my.cluster <- parallel::makeCluster(n.cores, outfile = "")
doParallel::registerDoParallel(cl = my.cluster)
params.all <- foreach (i = 1:nrow(grid), .combine = "rbind") %dopar% {
  params <- grid[i,]
  params$rmse <- "foo"
  print(params)
}
parallel::stopCluster(cl = my.cluster)
params.all

运行结果:

lambda mtry nodsize rmse
1      1    1       1  foo
2      2    1       1  foo

不添加print语句的代码及结果

library(foreach)

grid <- expand.grid(
  lambda=c(1,2),
  mtry=c(1),
  nodsize=c(1)
)

n.cores <- parallel::detectCores() - 1
my.cluster <- parallel::makeCluster(n.cores, outfile = "")
doParallel::registerDoParallel(cl = my.cluster)
params.all <- foreach (i = 1:nrow(grid), .combine = "rbind") %dopar% {
  params <- grid[i,]
  params$rmse <- "foo"
  # print(params) LINE COMMENTED
}
parallel::stopCluster(cl = my.cluster)
params.all

运行结果:

[,1] 
result.1 "foo"
result.2 "foo"

请问这种现象是否正常?

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 10:56:20