【发布时间】:2018-10-10 17:29:29
【问题描述】:
我有一组基因需要并行计算一些系数。
系数在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 个核心的情况下,它是 gene_array 的 4、11、18、25、... 95 个元素(每 7 个),当 R 使用 6 个核心时,索引是 2、8、14、。 ..,98(每 6 次)和 5 核的相同方式 - 每 5 次。
最重要的是它们对于这些过程是不同的,这意味着问题不在于特定的基因。
我怀疑可能存在无法正确运行我的功能的“损坏”核心,只有它会产生此错误。有没有办法追溯其 id 并将其从 R 可以使用的核心列表中排除?
【问题讨论】:
-
不检查,我的直觉是它与
gene_array的分块有关 - 函数GeneTo_GeneCoeffs_filtered(x)将根据块的数量以不同的x块调用,即ncores的值。例如,其中一个块可能包含所有缺失值。尝试生成chunks <- mcapply(gene_array, identity, mc.cores = ncores)并使用y <- GeneTo_GeneCoeffs_filtered(chunks[[1]])等手动调用每个块,以查看其中一个块是否“有问题”。 (我怀疑是否存在 CPU 硬件问题;如果不运行 R,您会注意到) -
嗨@lizaveta - 我想知道你是否曾经为自己解决过这个问题。我遇到了相同的问题 - 当核心数设置为 k 时,每个第 k 个结果都是一个错误。很奇怪的经历。给您一个问题:您正在应用的函数 GeneTo_GeneCoeffs_filtered 是否对磁盘或屏幕执行任何 IO?
-
嗨@malcook,我将结果保存在内存中,而没有将它们写入函数内部的磁盘。但是,我无法正确回忆起这种奇怪行为的原因是什么——我改用了另一种并行计算的方式。如果我没记错的话,问题出在我必须导出到核心的环境中
标签: r parallel-processing mclapply