我正在尝试优化我用doParallel/foreach
包编写的for循环,但是在指定foreach()
序列的方式上遇到了错误。
我编写的for循环将gen
文件转换为等位基因调用。给一个简单的示例,其中gen
文件如下所示:
22 rsXYZ 16162 G A 0 0 1 0 0 1 1 0 0
前5列是染色体,SNP,位置,等位基因1和等位基因2。此后3列分别用于每个人。例如,这里001
涉及主题1。有效的for循环代码为:
geno_to_alleles <- function(geno) {
# Pre-allocate final output - always initialize output variable to required length and data type
tmp = matrix(nrow = (ncol(geno)-5)/3, ncol = nrow(geno), byrow= T)
#j is subject index
j =1
for (i in seq(from=6,to=ncol(geno), by=3)){
cat(round(i/ncol(geno)*100,2),"% \r") # prints the percentage complete in realtime.
tmp[j,1:nrow(geno)] <- t(apply(geno[, i:(i+2)], 1, paste, collapse = ""))
j = j + 1
}
}
为foreach
软件包提供的大多数示例都很简单,例如foreach(i=1:3)
。我的情况for (i in seq(from=6,to=ncol(geno), by=3))
稍微复杂一点,在尝试与foreach
一起使用时似乎会引起问题
library(foreach)
library(doParallel)
foreach(i in seq(from=6,to=ncol(geno), by=3)) %dopar% geno_to_alleles(geno)
我收到以下错误:
错误:“ x <-foreach(i in”
中出现意外的'in'
我想加快这段代码的速度,并选择使用foreach/doParallel
,因为我认为我不需要更改代码(就像我尝试使用Rcpp
那样-我对此一无所知)。如果有人对提高速度的其他建议有建议,我也很高兴听到