【发布时间】:2015-12-10 13:19:43
【问题描述】:
我是 R 编程新手,想知道如何在使用 latticepackage 制作的12 个格子对象上并行运行 plot。
基本上,经过很多预处理步骤,我有以下命令:
plot(adhd_plot, split = c(1,1,4,3)) #plot adhd trellis object at 1,1 in a grid of 4 by 3 i.e 4 COLUMNS x 3 ROWS
plot(bpd_plot, split = c(2,1,4,3), newpage = F) #plot bpd trellis object in 2nd Column in a grid of 4colx3row
plot(bmi_plot, split = c(3,1,4,3), newpage = F)
plot(dbp_plot, split = c(4,1,4,3), newpage = F)
plot(height_plot, split = c(1,2,4,3), newpage = F)
plot(hdl_plot, split = c(2,2,4,3), newpage = F)
plot(ldl_plot, split = c(3,2,4,3), newpage = F)
plot(ra_plot, split = c(4,2,4,3), newpage = F)
plot(sbp_plot, split = c(1,3,4,3), newpage = F)
plot(scz_plot, split = c(2,3,4,3), newpage = F)
plot(tc_plot, split = c(3,3,4,3), newpage = F)
plot(tg_plot, split = c(4,3,4,3), newpage = F)
问题在于,虽然上述命令有效,但在 Mac OSX 上它们需要很长时间 (>4hrs) 才能生成如下图:
由于我的 Mac 有 8 个内核,我想我应该尝试将绘图命令拆分到不同的内核上,以加快绘图速度。
在搜索其他并行化问题后,我找到了doParallelpackage,并认为我可以在其中实现parLapplyfunction,如下所示:
library(doParallel)
detectCores()
cl <- makeCluster(6) #6 out of 8 cores
registerdoParallel(cl)
parLapply(cl, list_of_all_trellis_objects, plot)
但是,我不确定如何使用上述parLapply 命令中的split 参数将绘图放置在网格上的不同位置。
我一定要把12个地块分开放置而不叠加,那怎么做呢?
感谢您完成我的查询,我期待您的提示和解决方案。
【问题讨论】:
-
我不认为您可以并行绘制到同一设备。如果绘图时间过长,您可能会在这些绘图中绘制大量点(超过可以区分的点)。考虑如何避免这种情况。
-
@Roland Hei,感谢您的评论。你是对的。我有 GWAS 数据(全基因组关联研究),其中 12 个,所以它们确实很大,所有数据点(p 值)都需要绘制在 QQ(分位数-分位数)图中......无法避免那。这 12 个格子对象的总大小约为 650MB。
-
我会挑战你需要绘制所有点。绘制 qq 图的每 10 个点可能会给出几乎相同的图片。
标签: r parallel-processing bioinformatics lattice doparallel