R - 麦克拉应用遇到错误,具体取决于核心 ID?



我有一组基因,我需要并行计算一些系数。 系数在GeneTo_GeneCoeffs_filtered内计算,该以基因名称为输入并返回 2 个数据框的列表。

有了 100 长度的gene_array,我使用不同数量的内核运行此命令:5、6 和 7。

Coeffslist=mclapply(gene_array,GeneTo_GeneCoeffs_filtered,mc.cores = no_cores)

我在不同的基因名称上遇到错误,具体取决于分配给mclapply的核心数量。

GeneTo_GeneCoeffs_filtered无法返回数据帧列表的基因索引,它们具有模式。 在分配给 mclapply 的 7 个内核的情况下,它是 4、11、18、25、...gene_array的 95 个元素(每 7 个(,当 R 使用 6 个内核时,索引为 2、8、14,...,98(每 6 个(,5 个内核也是如此 - 每 5 个。

最重要的是,它们在这些过程中是不同的,这意味着问题不在于特定的基因。

我怀疑可能有"损坏"的核心无法正确运行我的函数,只有它会产生此错误。有没有办法追溯其 id 并将其从 R 可以使用的内核列表中排除?

仔细阅读 mclapply 的手册页会发现,这种行为是设计使然,它是以下两者之间交互的结果:

(一(

"输入 X 被分成与内核一样多的部分(目前 这些值按顺序分布在内核中,即第一个值 到核心 1,次于核心 2,...(核心 + 1(-核心 1 的第个值等( 然后将一个进程分叉到每个内核,结果是 收集。

(二(

将为 失败,即使不是全部失败。

在你的例子中,由于 (a(,你的gene_array在内核之间分布"循环"样式(连续元素的索引之间有 mc.core 的间隙(,并且凭借 (b(,如果任何gene_array元素引发错误,你会为发送到该核心的每个gene_array元素返回一个错误(在这些元素的索引之间有一个 mc.core 的间隙(。

我在昨天与Simon Urbanek的交流中更新了对此的理解:https://stat.ethz.ch/pipermail/r-sig-hpc/2019-September/002098.html 我还提供了一种错误处理方法,该方法仅对生成错误的索引产生错误。

对于通过传递mc.preschedule=FALSE生成错误的索引,也可以仅获取错误。

最新更新