最近用写了个画图的脚本, 需要一次性用ggplot绘制大量的图片. 虽然在脚本内所有需要使用循环的地方都已经使用上apply了, 但依然架不住一次画几百图, 所以捣鼓了一下parellel
, 将画图的部分并行执行已加快速度.
之前在用python的时候就有了解到多线程和多进程, 但是到了R这…好像没有太强调线程和进程的问题, 都是说并行计算…中文资料中能找得到的与并行计算相关的基本就是parellel
以及foreach
了, 当然我这里用的是parellel
, 然后两种方案的异同…没研究过…
使用方法其实比较简单, 就是先注册集群, 然后把任务丢到集群上跑(以函数的形式), 然后合并结果(我这里不需要), 注销集群就行. 当然, 这里的集群并不是指集群服务器, 而是英文中就写的是’cluster’, 我也不知道怎么翻译好…随便叫一下算了. 具体的实现代码如下:
1 | # 准备绘图函数 |
所以其实超简单的…唯一有点麻烦的问题是, 对于每一个集群节点, 计算需要的变量, 包, 函数都得单独加载一次. 对于变量和包都好说, 变量有专门的函数进行传递, 包的话可以把载入包的语句写到plot_process
里面, 但是自己编写的函数就没有直接可用的方式了…
在查了很久都没有解决方案后, 我突发奇想的把函数作为参数写到了plot_process
上, 居然有用…
在写完这个脚本后, 我还看到了另外一种解决方案, 就是把这些自定义函数单独写在另一个文件里, 然后在plot_process
使用source()
导入, 这个应该是个更好的方案, 回头我准备试试看….