【发布时间】:2021-11-15 10:38:32
【问题描述】:
我想通过将嵌套 for 循环与 foreach 包并行化来优化它们。我是这个主题的新手,我尝试了几种方法将值附加到数据框。我知道 for 循环在返回一个值时有些问题,但我想组合这些值并将它们存储到数据框中。我试图用 foreach 循环替换遍历行的 for 循环,但我无法使其工作。这个想法是为了更好地理解并行化 for 循环。
library(foreach)
library(doParallel)
cl <- makeCluster(2)
registerDoParallel(cl)
df <- data.frame(x=sample(10), y=sample(10), z = sample(10))
repeats <- 2
FUN <- function(df, repeats) {
foreach(k=1:repeats, .combine = 'rbind') %dopar% {
for(i in 1:nrow(df)) {
for(j in 1:ncol(df)) {
c(k=k ,i=i ,j=j , value=df[i, 1] * j )
}
}
}
}
FUN(df, repeat)
stopCluster(cl)
如前所述,我尝试将 for 循环替换为 foreach。同样,这些值没有正确存储。
foreach(k=1:repeats, .combine = 'rbind') %:% {
foreach(i=1:nrow(df), .combine = 'c') %dopar%{
for(j in 1:ncol(df)) {
c(k=k ,i=i ,j=j , value=df[i, 1] * j )
}
}
}
输出示例
k i j value
1 1 1 3
1 1 2 6
【问题讨论】:
标签: r foreach parallel.foreach