R語(yǔ)言中for循環(huán)的并行處理方式
前言
本文用于記錄筆者在將R語(yǔ)言中的for語(yǔ)句并行化處理中的一些問(wèn)題。
實(shí)驗(yàn)
這里使用foreach和doParallel包提供的函數(shù)實(shí)現(xiàn)for語(yǔ)句的并行處理。
for語(yǔ)句腳本
func <- function(x, y, z) {
return(x^y/z)
}
# >>> main <<<
x <- 2
y <- 3
z <- 1:100000
start <- (proc.time())[3][[1]]
a <- 0
for (i_z in z) {
a <- a + func(x, y, i_z)
}
end <- (proc.time())[3][[1]]
print(paste('Result = ', round(a, 2), ', time = ', (end-start), 's', sep=''))
輸出:
[1] "Result = 96.72, time = 0.177s"
并行化版本
library(foreach)
library(doParallel)
func <- function(x, y, z) {
return(x^y/z)
}
# >>> main <<<
x <- 2
y <- 3
z <- 1:100000
start <- (proc.time())[3][[1]]
cl <- makeCluster(12)
registerDoParallel(cl)
a <- foreach(z=z, .combine='rbind') %dopar% func(x, y, z)
a <- sum(a)
stopCluster(cl)
end <- (proc.time())[3][[1]]
print(paste('Result = ', round(a, 2), ', time = ', (end-start), 's', sep=''))
輸出:
[1] "Result = 96.72, time = 37.988s"
總結(jié)
1、這里發(fā)現(xiàn)并行化所用時(shí)間大于非并行化所用過(guò)的時(shí)間,是因?yàn)樾枰獔?zhí)行的操作(func函數(shù))過(guò)于簡(jiǎn)單,而foreach處理時(shí)會(huì)有額外的資源消耗。此時(shí)foreach額外消耗的資源遠(yuǎn)大于需要執(zhí)行的操作所需的資源,因此會(huì)導(dǎo)致并行化后反而使用的時(shí)間增加了。所以對(duì)于一些復(fù)雜的操作比較適合使用并行化的策略。
2、foreach函數(shù)的.packages參數(shù)可以為并行化函數(shù)傳遞額外需要的包。
3、foreach中的參數(shù)為需要在func中循環(huán)的變量,其他固定的變量則在func中傳入。參數(shù)可以是data.frame類(lèi)型。
補(bǔ)充:R語(yǔ)言--for循環(huán)語(yǔ)句的使用
R語(yǔ)言for循壞語(yǔ)句的使用(多個(gè)for)
對(duì)于多個(gè)for循還語(yǔ)句,R語(yǔ)言的執(zhí)行順序(以3個(gè)for為例):從外向內(nèi)單個(gè)執(zhí)行,里邊循還完整,再往外一層,直到全部完成。話不多說(shuō),上例子:
代碼:
library(data.table)
mm<-data.table()
m<-c(1,2,3,4,5)
n<-c('a','b','c','d','e')
o<-c(6,7,8,9,10)
for (i1 in m){
for ( i2 in n){
for (i3 in o){
print(c(i1,i2,i3))
aa<-data.table(i1,i2,i3)
bb<-rbind(mm,aa)
}
}
}
執(zhí)行結(jié)果:
[1] "1" "a" "6" [1] "1" "a" "7" [1] "1" "a" "8" [1] "1" "a" "9" [1] "1" "a" "10" [1] "1" "b" "6" [1] "1" "b" "7" [1] "1" "b" "8" [1] "1" "b" "9" [1] "1" "b" "10" [1] "1" "c" "6" [1] "1" "c" "7" [1] "1" "c" "8" [1] "1" "c" "9" [1] "1" "c" "10" [1] "1" "d" "6" [1] "1" "d" "7" [1] "1" "d" "8" [1] "1" "d" "9" [1] "1" "d" "10" [1] "1" "e" "6" [1] "1" "e" "7" [1] "1" "e" "8" [1] "1" "e" "9" [1] "1" "e" "10" [1] "2" "a" "6" [1] "2" "a" "7" [1] "2" "a" "8" [1] "2" "a" "9" [1] "2" "a" "10" [1] "2" "b" "6" [1] "2" "b" "7" [1] "2" "b" "8" [1] "2" "b" "9" [1] "2" "b" "10" [1] "2" "c" "6" [1] "2" "c" "7" [1] "2" "c" "8" [1] "2" "c" "9" [1] "2" "c" "10" [1] "2" "d" "6" [1] "2" "d" "7" [1] "2" "d" "8" [1] "2" "d" "9" [1] "2" "d" "10" [1] "2" "e" "6" [1] "2" "e" "7" [1] "2" "e" "8" [1] "2" "e" "9" [1] "2" "e" "10" [1] "3" "a" "6" [1] "3" "a" "7" [1] "3" "a" "8" [1] "3" "a" "9" [1] "3" "a" "10" [1] "3" "b" "6" [1] "3" "b" "7" [1] "3" "b" "8" [1] "3" "b" "9" [1] "3" "b" "10" [1] "3" "c" "6" [1] "3" "c" "7" [1] "3" "c" "8" [1] "3" "c" "9" [1] "3" "c" "10" [1] "3" "d" "6" [1] "3" "d" "7" [1] "3" "d" "8" [1] "3" "d" "9" [1] "3" "d" "10" [1] "3" "e" "6" [1] "3" "e" "7" [1] "3" "e" "8" [1] "3" "e" "9" [1] "3" "e" "10" [1] "4" "a" "6" [1] "4" "a" "7" [1] "4" "a" "8" [1] "4" "a" "9" [1] "4" "a" "10" [1] "4" "b" "6" [1] "4" "b" "7" [1] "4" "b" "8" [1] "4" "b" "9" [1] "4" "b" "10" [1] "4" "c" "6" [1] "4" "c" "7" [1] "4" "c" "8" [1] "4" "c" "9" [1] "4" "c" "10" [1] "4" "d" "6" [1] "4" "d" "7" [1] "4" "d" "8" [1] "4" "d" "9" [1] "4" "d" "10" [1] "4" "e" "6" [1] "4" "e" "7" [1] "4" "e" "8" [1] "4" "e" "9" [1] "4" "e" "10" [1] "5" "a" "6" [1] "5" "a" "7" [1] "5" "a" "8" [1] "5" "a" "9" [1] "5" "a" "10" [1] "5" "b" "6" [1] "5" "b" "7" [1] "5" "b" "8" [1] "5" "b" "9" [1] "5" "b" "10" [1] "5" "c" "6" [1] "5" "c" "7" [1] "5" "c" "8" [1] "5" "c" "9" [1] "5" "c" "10" [1] "5" "d" "6" [1] "5" "d" "7" [1] "5" "d" "8" [1] "5" "d" "9" [1] "5" "d" "10" [1] "5" "e" "6" [1] "5" "e" "7" [1] "5" "e" "8" [1] "5" "e" "9" [1] "5" "e" "10"
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。
相關(guān)文章
R語(yǔ)言關(guān)聯(lián)規(guī)則深入詳解
這篇文章主要介紹了R語(yǔ)言關(guān)聯(lián)規(guī)則深入詳解,文中內(nèi)容講解的很透徹,有感興趣的同學(xué)可以學(xué)習(xí)下2021-03-03
R語(yǔ)言apply系列函數(shù)實(shí)例詳解
apply()函數(shù)是一種很強(qiáng)大的機(jī)制,下面這篇文章主要給大家介紹了關(guān)于R語(yǔ)言apply系列函數(shù)的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-12-12
R語(yǔ)言數(shù)據(jù)框中的負(fù)索引介紹
這篇文章主要介紹了R語(yǔ)言數(shù)據(jù)框中的負(fù)索引介紹,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-04-04
R語(yǔ)言實(shí)現(xiàn)PCA主成分分析圖的示例代碼
主成分分析(Principal?Component?Analysis,PCA)是一種無(wú)監(jiān)督的數(shù)據(jù)降維方法,通過(guò)主成分分析可以盡可能保留下具備區(qū)分性的低維數(shù)據(jù)特征。本文將用R語(yǔ)言實(shí)現(xiàn)PCA主成分分析圖,需要的可以參考一下2022-04-04
R語(yǔ)言科學(xué)計(jì)數(shù)法介紹:digits和scipen設(shè)置方式
這篇文章主要介紹了R語(yǔ)言科學(xué)計(jì)數(shù)法介紹:digits和scipen設(shè)置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-04-04
R語(yǔ)言 設(shè)置ylab每個(gè)漢字豎向排列的操作
這篇文章主要介紹了R語(yǔ)言 設(shè)置ylab每個(gè)漢字豎向排列的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-04-04
R語(yǔ)言數(shù)據(jù)可視化學(xué)習(xí)之圖形參數(shù)修改詳解
這篇文章主要給大家介紹了關(guān)于R語(yǔ)言數(shù)據(jù)可視化學(xué)習(xí)之圖形參數(shù)修改的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03
R語(yǔ)言刷題檢驗(yàn)數(shù)據(jù)缺失類(lèi)型過(guò)程詳解
這篇文章主要為大家介紹了R語(yǔ)言刷題中檢驗(yàn)數(shù)據(jù)缺失類(lèi)型的過(guò)程示例分析詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2021-11-11

