r语言系统计算上是奇异的_R语言实现并行计算
Python作為多線程的編程語(yǔ)言在并行方面相對(duì)于R語(yǔ)言有很大的優(yōu)勢(shì),然而作為占據(jù)統(tǒng)計(jì)分析一席之地的R語(yǔ)言自然不能沒(méi)有并行計(jì)算的助力。那么我們來(lái)看下在R語(yǔ)言中有哪些并行的包:隱式并行:OpenBLAS,Intel MKL,NVIDIA cuBLAS等;顯性并行:parallel(主打lapply應(yīng)用)、foreach(主打for循環(huán))、SupR、還有利用GPU的辦法(gpuR)。所謂顯式并行也就是基于并行的編程語(yǔ)言編譯的程序;隱式并行是基于串行程序編譯的并行計(jì)算。當(dāng)然,在R語(yǔ)言核心功能中也是帶有了相關(guān)的并行的計(jì)算基礎(chǔ)包parallel。今天就給大家介紹下這個(gè)基礎(chǔ)并行包的具體應(yīng)用。
我們不需要再安裝這個(gè)包,可以直接進(jìn)行相關(guān)的計(jì)算。首先我們看下里面的幾個(gè)核心的函數(shù):
1. detectCores() 發(fā)現(xiàn)PC終端有多少個(gè)核。所謂核就是CPU的性能體現(xiàn),越多越好。實(shí)例:
library(parallel)cl.cores #發(fā)現(xiàn)可用核數(shù)2. makeCluster() 初始化我們需要用到的核數(shù)。其中type參數(shù)有兩種PSOCK適用所有操作系統(tǒng),FORK適用unix/max,實(shí)現(xiàn)內(nèi)存共享以及節(jié)省內(nèi)存。實(shí)例:
cl "cl.cores", 2),type="PSOCK")3. clusterExport() 將變量載入并行的環(huán)境中。實(shí)例:
xx=1:10clusterExport(cl, "xx")#讀入變量數(shù)據(jù)4. clusterEvalQ(,{code})? 將包或者代碼直接載入并行環(huán)境。實(shí)例:
clusterEvalQ(cl,{library(ggplot2);xy=1:10})clusterCall(cl, function(y) xy + y, 2:10)5. clusterCall() 在并行環(huán)境中,一次運(yùn)行過(guò)程在各節(jié)點(diǎn)的值。clusterMap便可以直接運(yùn)行所用的值,并以列表形式展示所有結(jié)果。實(shí)例:
clusterCall(cl, function(y) xx + y, 2:10)
clusterMap(cl,function(y) xx + y,2:10)6. parLapply(), parSapply(), 和 parApply() 和函數(shù) lapply, sapply 及 apply一一對(duì)應(yīng)。可以直接將自定義的函數(shù)引入并行環(huán)境。實(shí)例:
parSapply(cl,2:10, function(y) xx + y)7. clusterApply() 類似parLapply 系列,可以直接運(yùn)行得到所有結(jié)果,輸出列表格式。clusterApplyLB()便是對(duì)其的優(yōu)化,具體的優(yōu)化模式我們就不贅述了。實(shí)例:
clusterApply(cl,2:10, function(y) xx + y)8. do.call() 針對(duì)某個(gè)數(shù)據(jù)集執(zhí)行指定的函數(shù)功能。實(shí)例:
res=clusterApply(cl,2:10, function(y) xx +y)do.call('rbind',res)9. stopCluster() 關(guān)閉集群。實(shí)例
stopCluster(cl)
以上便是parallel包的全部功能函數(shù),其實(shí)并行真正解決的是重復(fù)性工作的情況,在P值的計(jì)算中應(yīng)用比較廣泛。然而對(duì)于遞歸計(jì)算需要一定的優(yōu)化才能使用并行計(jì)算,不然不一定有單機(jī)的效率高。
歡迎互相學(xué)習(xí)交流!?
總結(jié)
以上是生活随笔為你收集整理的r语言系统计算上是奇异的_R语言实现并行计算的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: python捕获全局异常统一管理_pyt
- 下一篇: oracle安装显示注册表,window