2

我正在使用一个自定义随机森林函数,该函数需要一组基因组数据(大约 56k 列)中的起点和终点。

我想将列号拆分为子组,并允许单独处理每个子组以加快速度。我用以下代码尝试了这个(不成功):

library(foreach)
library(doMC)
foreach(startMrk=(markers$start), endMrk=(markers$end)) %dopar% 
    rfFunction(genoA,genoB,0.8,ntree=100,startMrk=startMrk,endMrk=endMrk)

其中 startMrk 是一个数值变量数组:1 4 8 12 16而 endMrk 是另一个数组:3 7 11 15 19

对于这个例子,我希望一个核心以 1:3 运行样本,另一个以 4:7 运行,等等。我对 R 中的并行处理概念不熟悉,所以我非常愿意研究任何文档可用的。有人对我在并行处理或上述代码中缺少的东西有建议吗?

4

1 回答 1

1

这里的基本点是您将列拆分为块,对。首先,最好在每次迭代时适当地对数据集进行分块并将这些块馈送到 RF 中。此外,foreach 在某些方面的工作方式与 for 类似,因此代码可以是

rfs=vector('list',4)
foreach(i=1:4) %dopar% {
  ind <- markers$start[i]:markers$end[i]
  rfs[[i]] <- randomForest(genoA[,ind],genoB[,ind], 0.8, ntree=100)
}

我在常规的 randomForest 中给出了这个,但是你可以用一种简单的方式把它包装到你的自定义代码中。

于 2013-02-12T06:31:03.503 回答