杜雨,easycharts團隊成員,r語言中文社群專欄作者
興趣方向為:excel商務圖表,r語言資料視覺化,地理資訊資料視覺化。
本篇要講解的包是foreach包,這是乙個支援在r語言中呼叫多程序功能的第三方包,之前在對比顯式迴圈、向量化函式以及多程序在資料抓取的效率一文中,曾經演示過具體的**。
library("foreach")foreach(...,#待輸入的引數.combine,#結果返回後執行的資料合併操作(c代表合併為向量,list代表合併為列表,rbind代表合併為資料框).packages=null,#在多程序共享的程式包(僅對於非系統安裝包必備).export=null,#未在當前環境中定義的資料物件.verbose=false#是否列印執行資訊)library("doparallel")
以上函式中,第1個引數是必備引數,即必須有輸入引數,結果預設返回list。
接下來我們演示一遍整個多程序任務的過程:
首先定義乙個執行函式:
library("httr") library("jsonlite")2、執行多程序函式library("magrittr")
方案1——使用%do%函式執行普通的向量運算
library("doparallel")#載入doparallel包用於之後註冊程序方案2——使用%dopar%函式執行多程序的運算library("foreach")#匯入foreach包
system.time()使用者 系統 流逝0.080.012.18
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...