由于最近用R語(yǔ)言跑的數(shù)據(jù)比較多智绸,且都是重復(fù)的操作窝稿,跑一次時(shí)間長(zhǎng)楣富,所以嘗試了下并行運(yùn)算,所用的包為<font color="red">parallel</font>伴榔,使用簡(jiǎn)單纹蝴,易于上手。
parallel的用法
parallel
包的用法非常簡(jiǎn)單踪少,我們只需要將原本的apply()
改為parApply()
塘安,lapply()
改為parLapply()
,然后在函數(shù)前面加上初始化線程和結(jié)束線程的語(yǔ)句即可援奢。
我們可以通過(guò)detectCores()
來(lái)檢查我們自己電腦(或者服務(wù)器)的總線程數(shù)兼犯,并對(duì)其進(jìn)行合理的線程設(shè)置。
示例如下:
# 設(shè)置并行線程數(shù)
num.cores <- 4
# 初始化線程
cl <- makeCluster(num.cores)
# 定義線程函數(shù)
parLapply(cl, seq(1,4), function(x) c(x^2, x^4))
# 結(jié)束線程
stopCluster(cl)
輸出結(jié)果如下:
[[1]]
[1] 1 1
[[2]]
[1] 4 16
[[3]]
[1] 9 81
[[4]]
[1] 16 256
我們只需對(duì)并行的函數(shù)進(jìn)行修改即可實(shí)現(xiàn)多線程并行運(yùn)算,在資源充足的情況下切黔,大大地加快我們的運(yùn)算時(shí)間砸脊。
小小建議
- 申請(qǐng)全局變量時(shí),需要把變量放在
makeCluster()
初始化之前纬霞,不然會(huì)一直提示報(bào)錯(cuò)凌埂,報(bào)錯(cuò)類(lèi)似如下:
ERROR: Error in doTryCatch(return(expr), name, parentenv, handler): object 'batch.length' not found
- 使用
rm()
刪除多余變量,以防運(yùn)行內(nèi)存過(guò)大诗芜。