Alter data.frame object in foreach dopar loop



我需要并行化一些 R 代码,我计划使用%dopar%函数使用foreach库。

我想在 data.frame 中添加列,我也不希望 foreach 在完成循环后打印出结果。

请注意,我并不是在问最好的方法,示例代码只是为了演示我正在尝试做的事情。

我已经尝试了下面的示例中的代码,但它不会更新 data.frame,其次它返回打印出来的 data.frame。

library(foreach)
library(doParallel)
cl<-makeCluster(8)
registerDoParallel(cl)
data <- iris
foreach(i=1:(ncol(data)- 1)) %dopar% {
data[,paste0(names(data),"_1")] <- data[,i + 1]
}

我希望循环的输出在每次迭代时向 data.frame 添加一个新列,并返回包含 4 列的 data.frame。

您无法更改原始数据帧,因为数据是单独传递到每个节点的,并且每个节点在不同的环境中工作。

相反,请基于原始数据帧创建新数据帧。

library(foreach)
library(doParallel)
cl<-makeCluster(8)
registerDoParallel(cl)
data <- iris
result <- foreach(i=1:(ncol(data)- 1),
.init = data,
.combine = cbind) %dopar% {
out <- data[,i + 1,drop = FALSE]
colnames(out) <- paste0(colnames(out),"_1")
return(out)
} 

最新更新