Я пытаюсь оптимизировать цикл for, который я написал с пакетами doParallel/foreach
, но наталкиваюсь на ошибку, указанную в последовательности 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)
Я получаю следующую ошибку:
Ошибка: неожиданное 'in' в "x <-foreach (i in" </p>
Я хотел бы ускорить этот код, и было выбрано использование foreach/doParallel
, потому что я не думал, что мне нужно будет менять свой код (как если бы я попытался использовать Rcpp
- что-то, что я ничего не знаю около). Если у кого-то есть предложения по другим способам ускорить это, я тоже рад это услышать