[英]Output of parallel computing in R on Windows
我想在 Windows 上用 R 做一些並行計算。
library(doSNOW)
library(foreach)
cl<-makeCluster(4)
registerDoSNOW(cl)
nn = seq(2,20, by=2)
nn2 = rep(-1,10)
vector.accessed.within.iteration = rep(0, 10)
y = foreach(i=1:10) %dopar% {
print(paste0('i = ', i))
nn2[i] = (nn[i])^2
vector.accessed.within.iteration[i] = nn[i] + nn2[i]
nn2[i]
}
stopCluster(cl)
運行代碼時, y
將按照預期作為 2 到 20 的方格列表返回。 但是,向量nn2
和vector.accessed.within.iteration
都不會在foreach
循環中修改。 此外,不會出現打印print(paste0('i = ', i))
。
是否可以在 Windows 上並行運行循環迭代,同時還可以顯示消息和修改全局環境中的變量?
是否可以在 Windows 上並行運行循環迭代,同時...修改全局環境中的變量?
不(*)。 在foreach() %dopar% { ... }
構造中設置的所有值必須在每次迭代結束時返回。 這是由foreach包的設計和理念決定的。 有關如何返回多個值的信息,請參閱 2019 年 1 月 11 日的博客文章“通過將 For 循環重寫為 Lapply 調用來並行化它”中的“示例 2:一個稍微復雜的 for 循環”(免責聲明:我是作者) .
(*) 存在使用其他通道(例如文件系統)進行通信的各種變通方法。 但是,只有在所有其他替代方案都已用盡並失敗時,才應使用此類解決方案。 我強烈推薦此類替代解決方案,因為您會遇到其他類型的問題。 在你的情況下,你絕對不需要它。
是否可以在 Windows 上並行運行循環迭代,同時還顯示消息......?
是的,如果您使用doFuture foreach 適配器(免責聲明:我是作者)。 當您使用它時,您將可以訪問所有未來的框架,其中包括輸出、消息、警告和其他條件類型的中繼。 您可以在 2018 年 7 月 23 日的博客文章“future 1.9.0 - Output from The Future”中閱讀相關內容(免責聲明:我是作者)。
> library(doFuture)
> registerDoFuture() ## tell foreach to use the future framework
> ## Create a local cluster of two local workers
> plan(multisession, workers = 2L)
> library(foreach)
> y <- foreach(x = 1:3) %dopar% {
cat(paste0("x = ", x, "\n"))
sqrt(x)
}
x = 1
x = 2
x = 3
>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.