Есть несколько проблем с вашим кодом.Вы код вычисляете выходную переменную на основе значения этой переменной в предыдущей итерации, например:
Na_Mass<- c(Na_Mass, NAD*NaAdductMass)
Вместо этого вам нужно сделать что-то вроде этого:
Na_Mass <- foreach (NAD in 0:NAmax, .combine = “c”) %dopar%{
return(NAD*NaAdductMas)
}
Для болеепримеры см. в документации doParallel
пакетов: https://cran.r -project.org / web / packages / doParallel / vignettes / gettingstartedParallel.pdf
Что касается количества ядер процессора в вашей программебудет равен HNcC * FucC * SAC * NAmax, что, вероятно, очень большое число, и если на вашем компьютере всего 2 процессора, вы рискуете его сжечь.И в то же время каждый параллельный процесс в R не будет иметь достаточно ресурсов ЦП и будет работать значительно медленнее.Я бы распараллелил не более одного цикла.
Еще одно замечание: Этот подход для вычисления Na_cnt и других объектов в вашем цикле ОЧЕНЬ медленный с распараллеливанием или без него :
Na_Cnt<- c(Na_Cnt, NAD)
Вместо этого вы должны векторизовать :
Na_Cnt <- 0:NAmax
Аналогично:
SO3_Cnt<- rep( SO3, NAMax+1)
SA_Cnt<- rep( SA, NAMax+1)
Fuc_Cnt <- rep(F, NAMax+1)
HexNAc_Cnt <- rep( HN, NAMax+1)
Hex_Cnt <- rep(H,NAMax+1 )
Аналогично всем остальным операторам вашего внутреннего цикла,Это будет значительно быстрее, и вам не понадобится распараллеливание.