我有一组基因,需要并行计算一些系数。系数是在GeneTo_GeneCoeffs_filtered中计算的,它以基因名称作为输入,并返回两个数据帧的列表。
有了100长的gene_array,我使用不同数量的内核运行这个命令: 5、6和7。
Coeffslist=mclapply(gene_array,GeneTo_GeneCoeffs_filtered,mc.cores = no_cores)根据分配给mclapply的核数,我在不同的基因名称上遇到错误。
GeneTo_GeneCoeffs_filtered无法返回它们具有模式的数据帧列表的基因索引。在分配给mclapply的7个核的情况下,它是gene_array的4、11、18、25、.95个元素(每7个核),当R与6个核一起工作时,索引为2、8、14、.、98 (每6),与5核相同--每5核。
最重要的是,它们在这些过程中是不同的,这意味着问题不是特定的基因。
我怀疑可能有“损坏”的核心不能正常运行我的函数,只有它才会产生这个错误。有没有办法追踪它的id,并将它排除在R可以使用的核心列表中?
发布于 2019-09-17 17:22:40
仔细阅读mclapply的命令页可以发现,这种行为是由设计造成的,它是由于以下几个方面的交互而产生的:
(a)
“输入X被分成多个部分,就像有核一样(目前这些值按顺序分布在各个核上,即第一个值到核心1,第二个值到核心2,.(核心+ 1)-th值到核心1等等),然后一个进程分叉到每个核,然后收集结果。”
(b)
即使不是所有失败的值都失败了,也会为所有涉及到的值返回一个“尝试错误”对象。
在您的情况下,由于(a),您的gene_array是在核心之间传播“循环”样式(在连续元素的索引之间有一个mc.cores间隙),并且凭借(b),如果任何gene_array元素引发错误,则返回发送到该核心的每个gene_array元素的错误(在这些元素的索引之间有一个mc.cores间隔)。
我在昨天与Simon:https://stat.ethz.ch/pipermail/r-sig-hpc/2019-September/002098.html的一次交换中更新了对此的理解,其中我还提供了一种错误处理方法,只对生成错误的索引产生错误。
您还只能获得通过传递mc.preschedule=FALSE生成错误的索引的错误。
https://stackoverflow.com/questions/52745779
复制相似问题