1、并行计算概念
并行计算是指同时使用多种计算资源解决计算问题的过程。
R语言是一个单线程的程序。在现代多核心处理器上,R无法有效利用所有计算内核。
当下时代,我们需要处理的数据量日渐增大,R的计算模式限制了R处理大规模数据的能力。
2、R如何并行计算
向量化编程:比较适合数据框的操作。
并行化包:适合复杂的运算。适用于一个大问题可以被分解为并发执行的小问题。例如:有10万个结构相同的数据文件,想把每个文件的数据都读出来。对每个文件的数据各自进行一次线性回归。
3、parallel并行计算
案例1:计算1到1000每个自然数的平方。
# 方法1
for(i in 1:1000){print(i*i)
}
# 方法2
num<-1:1000
num*num
# 方法3
square<-function(x){return(x^2)}
sapply(1:1000,square)
# 方法4
library(parallel)
total_cores<-detectCores()
print(total_cores)
cl<-makeCluster(total_cores-6)
num<-1:1000
parLapply(cl,num,square)
stopCluster
案例2:正对1到2000000每个自然数除以13,如果余数大于5,则求该数平方,否则求开平发。
fun1<-function(x){if(x%%13){result<-x^2}else{result<-sqrt(x)}return(result)
}total_cores<-detectCores()
total_cores
cl<-makeCluster(total_cores-6)
num<-1:2000000
parLapply(cl,num,fun1)
stopCluster(cl)
4、foreach并行计算
案例:写一个function,实现对一个数取平方之后,再除以17,再乘以19。针对1至100000的自然熟,运行这个function。
library(foreach)
library(doParallel)
# 编写函数
func<-function(x){y<-(x^2)/17*19return(y)
}
# 启动集群作为foreach并行计算的后端
cl<-makeCluster(5)
registerDoParallel(cl)
# 并行计算方式
system.time(result<-foreach(x=1:100000,.combine = 'rbind' )%dopar% func(x)
)
stopCluster(cl)
result