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