我有一组基因,需要为它们并行计算一些系数。
在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可以使用的内核列表中排除?
答案 0 :(得分:1)
仔细阅读mclapply的manpage可以发现,此行为是设计使然,它是由于以下两者之间的相互作用而产生的:
(a)
”输入X分为与核心数量一样多的部分(当前 这些值按顺序分布在各个核心上,即第一个值 到内核1,第二个到内核2,...(内核的第1个值)到内核1等) 然后将一个过程分叉到每个核心,结果是 收集。”
(b)
将为其中涉及的所有值返回一个“ 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,其中我还提供了一种错误处理方法,仅对产生错误的索引产生错误。
您还可以仅通过传递AND NOT EXISTS(SELECT 1 from dbo.EmployeeTable e
INNER JOIN dbo.ResourceTable r on e.empID = r.employeeID
WHERE r.TypeID = 2 --this is internal employees
AND e.EmployeeName = x.UserName --this user name comes from a join earlier on in my code.)
来获取产生错误的索引的错误。