产品单页网站,宁波高端定制网站建设,如何进入公司网站后台,招聘网页设计1-lapply()函数介绍#xff1a;
为什么介绍这个函数呢#xff1f;因为在windows中使用parLapply()函数和lapply()的结构和用法是非常相似的#xff0c;我们只需要将原本用lapply(x, fun)迭代函数 直接改写成 parLapply(makeCluster(c1), x, fun)即可#xff0c;这里的直接…1-lapply()函数介绍
为什么介绍这个函数呢因为在windows中使用parLapply()函数和lapply()的结构和用法是非常相似的我们只需要将原本用lapply(x, fun)迭代函数 直接改写成 parLapply(makeCluster(c1), x, fun)即可这里的直接改写是非常简单的只需要设置使用计算机的核数后面的参数直接挪到parLapply()中。
lapply() 线性数据迭代
lapply是list(列表)和apply(应用)的组合函数的作用对一个列表型或者向量型数据应用一个函数返回值不区分处理对象皆是列表结构。这个函数开头的第一个字母“l”表明这个函数的返回类型为列表。
返回值的元素个数与处理对象中的元素个数相同。 该函数的语法结构为 lapply(X, FUN...) 其中 X代表需要执行运算的列表或者向量FUN代表需要运行的函数这个参数的自定义范围非常广用户可以将几百行代码封装为要给function(函数)来设置该参数三个点 表示FUN中的相应参数设置。 例子1
使用均值函数mean来分别计算向量x、y和z的平均值最后结果会以列表的形式现实在console中。 x - 1:10y - 1:10z - 1:10lapply(list(x,y,z), mean)
[[1]]
[1] 5.5[[2]]
[1] 5.5[[3]]
[1] 5.5 例子2 x - c(1:10, NA)y - c(1:10, NA)z - c(1:10, NA)lapply(list(x,y,z), function(x) {mean(x, na.rm T)})
[[1]]
[1] 5.5[[2]]
[1] 5.5[[3]]
[1] 5.5
例子3
lapply函数等价于for循环循环4次每次花费时间5秒钟。总共预期花费时间为20秒4*5秒 for(i in 1:4){Sys.sleep(5)}lapply(1:4, function(i) Sys.sleep(5))
[[1]]
NULL[[2]]
NULL[[3]]
NULL
2-在Windows使用并行计算使用parLapply()函数
2.1-并行计算的准备阶段
只要开始执行并行需要设置使用计算机的核数以及关闭执行并行。
流程设置并行计算的核数--执行并行计算--关闭并行计算的集群。
无论使使用哪种并行计算包都是基于上述三个步骤1-设置并行计算的核数2 执行并行计算 3 关闭并行计算的集群。 library(parallel) #Step1 设置并行计算使用的核数 num_cores - detectCores(logicalFALSE) #返回的是计算机的物理核数 cl - makeCluster(num_cores)# 设置并行计算的核心数这里num_cores是整数合理即可 # Step2: 执行并行计算的任务 result - parLapply(cl, x, fun) # Step3: 关闭并行计算的集群 stopCluster(cl) 其中detectCores()#这个函数中参数logical默认取值为TRUE该函数返回的是计算机的线程数如果设置logicalFALSE,返回的是物理核数/CPU。
例如计算机是12核24线程
logicalTRUE返回的是逻辑核数24线程logicalFALSE返回的是物理核数12核。
2.2-parLapply()函数介绍
在Windows 系统中使用parLapply()函数替换lapply函数进行并行计算只不过多了一个参数即设置集群makeCluster()。
也就是说parLapply( )和lapply( )函数是相似的在执行并行运算的时候只需要把之前用lapply()函数写的部分 lappy(x, fun) 改写成 parLapply(makeCluster(4), x, fun) 其中makeCluster(4) 设置并行计算的核数为4.
2.3-使用parLapply()函数编写执行并行计算
对上面的例子3在windows系统中使用parLapply()函数执行并行计算 system.time(for(i in 1:4){Sys.sleep(5)})用户 系统 流逝 0.00 0.00 20.02 system.time(lapply(1:4,function(i)Sys.sleep(5)))用户 系统 流逝 0.02 0.00 20.02system.time(parLapply(makeCluster(4),1:4, function(i) Sys.sleep(5)))
用户 系统 流逝
0.04 0.01 5.97
3-在非Windows中使用mclapply()函数
例如上面例子3使用mclapply函数执行并行计算 system.time( mclapply(1:4, function(i) Sys.sleep(5), mc.cores4) ) 其中参数mc.cores它告诉mclapply()函数自动将独立计算拆分为多少个进程。
参考
《R数据科学实践工具详解与案例分析》2019年6月出版机工社
《R的极客理想量化投资篇》2018年1月出版机工社
《R: Predictive Analysis》(2017年3月出版 中国图书进出口) 介绍了parLapply函数执行并行计算
并行运算 R - 搜索结果 - 知乎 (zhihu.com)
【多核的春天】R语言里的并行计算 - 知乎 (zhihu.com) 介绍使用foreach函数执行并行计算
R语言的并行计算 - 知乎 (zhihu.com)