Параллельные вычисления с использованием `mclapply` в R, Linux

#r #parallel-processing #mclapply

#r #параллельная обработка #маклаппли

Вопрос:

Как преобразовать приведенный ниже код для выполнения параллельных заданий на 5 ядрах?

От последовательной обработки

 nfac=length(values)
n=10
for (i in 1:5){
system(sprintf('./tools/siteLevelFLUXNET/morris/%s/prep_model_params.sh %s %s %s',i,nfac,n))
}
 

к параллельной обработке

 system(sprintf('./tools/siteLevelFLUXNET/morris/1/prep_model_params.sh %s %s %s',nfac,n)) on core 1
.
.
.
system(sprintf('./tools/siteLevelFLUXNET/morris/5/prep_model_params.sh %s %s %s',nfac,n)) on core 5
 

На командном терминале это может быть выполнено с использованием amp; между 2 кодами, но я требую nfac , чтобы и n считывались из R

Ответ №1:

Вы ищете что-то вроде этого,

 library(parallel)
nfac=length(values)
n=10
# define a function 
fun_i<-function(i)
{
  return(system(sprintf('./tools/siteLevelFLUXNET/morris/%s/prep_model_params.sh %s %s %s',i,nfac,n)))
}


do.call("cbind", mclapply(X=1:5,FUN = function(X)fun_i(X),mc.cores=5))