簡體   English   中英

Windows 上 R 中並行計算的輸出

[英]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 的方格列表返回。 但是,向量nn2vector.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM