我想通過使用foreach包將嵌套的for回圈并行化來優化我的嵌套回圈。我是這方面的新手,我嘗試了幾種方法,將這些值追加到一個資料框中。我知道for回圈有問題,因為它回傳了一個值,但我想把這些值合并起來,并把它們存盤到一個資料框中。我試圖用一個foreach回圈來代替迭代行的for回圈,但我無法使其作業。我的想法是要更好地理解for回圈的并行化。
library(foreach)
library(doParallel)
cl <- makeCluster(2)
registerDoParallel(cl)
df <- data. frame(x=sample(10)。 y=sample(10)/span>。 z = sample(10))
重復 <- 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 。 值=df[/span>i。 1] * j )
}
}
}
}
FUN(df, repeat)
stopCluster(cl)
如前所述,我嘗試用foreach代替for回圈。同樣,數值沒有被正確存盤。
foreach(k=1。 重復, . combine = 'rbind') %:% {
foreach(i=1: nrow(df), . combine = 'c') %dopar%{ .
for(j in 1: ncol(df)) {
c(k=k 。 i=i ,j=j 。 值=df[/span>i。 1] * j )
}
}
}
輸出的例子
k i j value
1 1 1 3
1 1 2 6
uj5u.com熱心網友回復:
foreach對于嵌套回圈有一個特殊的語法(見vignette("nested")):
FUN < - function(df, repeats) {>
foreach(k=1:repeats, . combine = 'rbind') %:% .
foreach(i = 1: nrow(df), . combine = 'rbind') %:% 。
foreach(j = 1: ncol(df), . combine = 'rbind') %dopar% {> .
c(k=k, i=i ,j=j 。 值=df[/span>i。 1] * j )
}
}
`rownames< -`(FUN(DF, 重復), NULL)
我的輸出比你的長,所以我不確定你的目的是什么。 另外,只要你提供一個使用隨機資料的例子,就使用set.seed。 這樣我們每次都會得到相同的結果。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/334059.html
標籤:
