R語言多工處理與並行運算包 foreach

2021-08-19 22:58:12 字數 1351 閱讀 5580

杜雨,easycharts團隊成員,r語言中文社群專欄作者

興趣方向為:excel商務圖表,r語言資料視覺化,地理資訊資料視覺化。

本篇要講解的包是foreach包,這是乙個支援在r語言中呼叫多程序功能的第三方包,之前在對比顯式迴圈、向量化函式以及多程序在資料抓取的效率一文中,曾經演示過具體的**。

library("foreach")

library("doparallel")

foreach(...,#待輸入的引數.combine,#結果返回後執行的資料合併操作(c代表合併為向量,list代表合併為列表,rbind代表合併為資料框).packages=null,#在多程序共享的程式包(僅對於非系統安裝包必備).export=null,#未在當前環境中定義的資料物件.verbose=false#是否列印執行資訊)

以上函式中,第1個引數是必備引數,即必須有輸入引數,結果預設返回list。

接下來我們演示一遍整個多程序任務的過程:

首先定義乙個執行函式:

library("httr") library("jsonlite")

library("magrittr")

2、執行多程序函式

方案1——使用%do%函式執行普通的向量運算

library("doparallel")#載入doparallel包用於之後註冊程序

library("foreach")#匯入foreach包

system.time()使用者 系統 流逝0.080.012.18

方案2——使用%dopar%函式執行多程序的運算

system.time()使用者 系統 流逝0.390.034.53

因為%do%操作是單程序的,因而即便啟動多程序環境也是徒勞。

dt::datatable(mydata1)

可以看到,%dopar%操作比%do%操作僅僅節省了0.04秒左右,但是鑑於抓包的請求頻率比較高,這樣多程序所節省的時間效率感知不夠明顯。

system.time(mydata3 <- plyr::ldply(1:16,getpdf))使用者 系統 流逝0.320.004.54

整體時間效率比較:

ldply > %do% >  %dopar%4.54  > 4.53 >  2.18

從時間效率上來看,的確節省了將近50%的時間。如此高逼格的神器,怎能不學呢~~

R語言 並行處理

最新更新參考 具體的不懂,只記錄實現 r自帶的包,可以實現並行處理。library parallel detectcores logical f 獲得實際核數 cl makecluster getoption cl.cores 4 設定並行核數為4 clusterexport cl cl,varli...

R語言中的並行處理

網上有人說foreach包可以並行,我就去弄了,結果發現乙個普通的二重迴圈什麼事都不錯都很卡!搗鼓了半天才發現是foreach的問題 為了提速,做了如下事宜 計算trustl r.trust matrix matrix rep 0,r.item count r.user count nrow r.u...

R語言中for迴圈的並行處理

本文用於記錄筆者在將r語言中的for語句並行化處理中的一些問題。這裡使用foreach和doparallel包提供的函式實現for語句的並行處理。func function x,y,z main x 2 y 3 z 1 100000 start proc.time 3 1 a 0 for i z i...