r - mclapply 根据核心 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 个核心的情况下,它是(每 7 个)的 4、11、18、25、... 95 个元素gene_array
,当 R 使用 6 个核心时,索引是 2、8、14、...、 98(每 6 个)和 5 个内核的相同方式 - 每 5 个。
最重要的是它们对于这些过程是不同的,这意味着问题不在于特定的基因。
我怀疑可能存在无法正确运行我的功能的“损坏”核心,只有它会产生此错误。有没有办法追溯其 id 并将其从 R 可以使用的核心列表中排除?
解决方案
仔细阅读 mclapply 的联机帮助页会发现,这种行为是设计使然,它是以下交互的结果:
(一种)
“输入 X 被分成与核心一样多的部分(当前值按顺序分布在核心中,即第一个值到核心 1,第二个到核心 2,......(核心 + 1)-th 值到核心1等),然后将一个进程分叉到每个核心并收集结果。”
(二)
将针对失败中涉及的所有值返回一个“try-error”对象,即使并非所有值都失败了。
在您的情况下,凭借(a),您的gene_array 以“循环”方式分布在核心上(连续元素的索引之间有 mc.cores 的间隙),并且凭借(b),如果有的话gene_array 元素引发错误,您会为每个发送到该核心的gene_array 元素返回一个错误(这些元素的索引之间有mc.cores 的间隙)。
我昨天在与 Simon Urbanek 的交流中刷新了我对这一点的理解:https ://stat.ethz.ch/pipermail/r-sig-hpc/2019-September/002098.html在其中我还提供了一种错误处理方法仅针对产生错误的索引的错误。
您还可以仅通过传递生成错误的索引来获取错误mc.preschedule=FALSE
。
推荐阅读
- r - R - 条件格式 styleColorBar 应用于数据表的一行
- reactjs - 需要帮助尝试在 ReactJS 中的输入组件内放置图标
- python - 来自linux下设备的pyvisa不断回答
- java - EntityManager 可以读取数据但不持久化更改
- c# - 只有键的实体框架更新表
- python - 在不覆盖已部署的函数的情况下,将函数增量添加到 Azure Function Host
- amazon-web-services - 如何在 AWS IoT Core 中检查设备是否离线
- https - 可以在 https 标头中发送请求参数吗?
- c - C - 使用硬编码库的引用编译时出错
- python - If -Else 带有 Xpath 上的文本