Неожиданное `in` в foreach - PullRequest
0 голосов
/ 04 июня 2019

Я пытаюсь оптимизировать цикл 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 - что-то, что я ничего не знаю около). Если у кого-то есть предложения по другим способам ускорить это, я тоже рад это услышать

...