【问题标题】:Is there a way to execute a function in parallel other than apply or foreach?除了 apply 或 foreach 之外,还有其他方法可以并行执行函数吗?
【发布时间】:2020-10-19 21:18:20
【问题描述】:

所以对于我的第一篇文章,我想出了一个相当尴尬的问题。我有这个用 R 编写的代码,它基本上是对 X 个基因的 for 循环分析,以获得写在 4 个不同文件中的输出。 问题是,它的时间太长了。这里的想法是尝试利用我正在处理的集群的全部计算能力,并在不同的核心上展开循环。

主函数结构如下:

  • 在不同的数据框中打开输入数据,塑造和创建变量,如样本和基因的数量(稍后在输出文件创建和主 for 循环中使用)
  • 播种
  • 创建将写入结果的所有输出文件
  • 分析的主循环将迭代所有基因,每次都进行计算和写入结果。

因此,为了加快速度,我正在考虑将我的基因数据框拆分为 500 个基因,每个基因包含 20 个基因的较小子集,并为每个基因并行运行主循环。例如,根据我对foreachmcapply 的理解,问题在于它们更多地设计用于同一数据集上的多次迭代,而不是在不同数据集上使用相同的函数。我可能错了。

另一种解决方案是同时运行多个基因,但我不知道该怎么做。

很抱歉这篇文章很长,而且我无法提供代码......但如果有一些想法或建议的解决方案,我会很乐意准确一点。

感谢您的宝贵时间!

【问题讨论】:

  • 请提供您的代码和一些数据的工作示例。
  • 您好,我使用的数据是个人数据,所以我无法分享...实际上要在此处粘贴的管道很长。为了更容易阅读,这是代码来自的 github,这里使用的文件是 gtex_tiss_chrom_training.R 和 gtex_v7_nested_cv_elnet.R 。第一个是调用第二个中编写的函数。 github.com/hakyimlab/PredictDB_Pipeline_GTEx_v7/tree/master/…

标签: r loops dataframe parallel.foreach doparallel


【解决方案1】:

我认为图书馆“并行”会在这里为您提供帮助。您可以使用 mclapply 函数,它类似于 lapply,但将任务分配给多个处理器,并合并来自每个函数调用和返回的响应。 一个例子:

library(parallel)
nC <- detectCores()

mclapply(your_data, your_function, nC)

【讨论】:

  • 我遇到的问题是我的输入数据是多个,它适用于多个输入文件吗?我的主要函数调用如下所示:main(snp_annot_file, gene_annot_file, genotype_file, expression_file, covariates_file, as.numeric(chrom), prefix, null_testing=FALSE)
猜你喜欢
  • 2012-01-29
  • 2012-05-23
  • 2018-03-01
  • 2015-12-08
  • 2016-05-01
  • 2019-09-14
  • 2017-07-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多