Saltar al contenido

Ejecute múltiples R-scripts simultáneamente

Luego de consultar con especialistas en la materia, programadores de diversas ramas y profesores dimos con la respuesta al dilema y la plasmamos en este post.

Solución:

##En RStudio

Si hace clic derecho en RStudio, debería poder abrir varias “sesiones” separadas de RStudio (ya sea que use Proyectos o no). De forma predeterminada, estos usarán 1 núcleo cada uno.

Actualizar (Julio de 2018): RStudio v1.2.830-1, que está disponible como versión preliminar, admite un panel de “trabajos”. Esto está dedicado a ejecutar scripts de R en segundo plano separados de la sesión de R interactiva:

  • Ejecute cualquier script de R como trabajo en segundo plano en una sesión de R limpia
  • Supervise el progreso y vea la salida del script en tiempo real
  • Opcionalmente, proporcione a los trabajos su entorno global cuando se inicien y exporte los valores cuando se completen.

Estará disponible en RStudio versión 1.2.

##Ejecución de secuencias de comandos en la terminal

Si tiene varios scripts que sabe que se ejecutan sin errores, le recomiendo ejecutarlos en diferentes parámetros a través de la línea de comandos:

RCMD script.R
RScript script.R
R --vanilla < script.R

Ejecutando en segundo plano:

nohup Rscript script.R &

Aquí "&" ejecuta el script en segundo plano (se puede recuperar con fgmonitoreado con htopy asesinado con kill o pkill rsession) y nohup guarda la salida en un archivo y continúa ejecutándose si la terminal está cerrada.

Pasar argumentos a un script:

Rscript script.R 1 2 3

Esto pasará c(1, 2, 3) a R como la salida de commandArgs() por lo que un bucle en bash puede ejecutar varias instancias de Rscript con un bucle bash:

for ii in 1 2 3
  do
  nohup Rscript script.R $ii &
  done

##Ejecutar código paralelo dentro de R

A menudo encontrará que un paso en particular en su secuencia de comandos R está ralentizando los cálculos, ¿puedo sugerir ejecutar código paralelo dentro de su código R en lugar de ejecutarlos por separado? recomendaría el [snow package][1] para ejecutar bucles en paralelo en R. Generalmente, en lugar de usar:

cl <- makeCluster(n)
# n = number of cores (I'd recommend one less than machine capacity)
clusterExport(cl, list=ls()) #export input data to all cores
output_list <- parLapply(cl, input_list, function(x) ... )
stopCluster() # close cluster when complete (particularly on shared machines)

Use esto en cualquier lugar donde normalmente usaría un lapply función en R para ejecutarlo en paralelo.
[1]: https://www.r-bloggers.com/quick-guide-to-parallel-r-with-snow/

EDITAR: dadas las mejoras en RStudio, este método ya no es la mejor manera de hacer esto; consulte la respuesta de Tom Kelly a continuación


Suponiendo que no es necesario que los resultados terminen en el mismo entorno, puede lograrlo utilizando proyectos de RStudio: https://support.rstudio.com/hc/en-us/articles/200526207-Using-Projects

Primero crea dos proyectos separados. Puede abrir ambos simultáneamente, lo que resultará en dos sesiones. Luego puede abrir cada script en cada proyecto y ejecutar cada uno por separado. Luego, depende de su sistema operativo administrar la asignación principal.

Puede lograr el paralelismo multinúcleo (como se explica aquí https://cran.r-project.org/web/packages/doMC/vignettes/gettingstartedMC.pdf) en la misma sesión con el siguiente código

if(Sys.info()["sysname"]=="Windows")
  library(doParallel)
  cl<-makeCluster(numberOfCores)
  registerDoParallel(cl)
else
  library(doMC)
  registerDoMC(numberOfCores)

library(foreach)

someList<-list("file1","file2")
returnComputation <-
  foreach(x=someList) %dopar%
    source(x)
  


if(Sys.info()["sysname"]=="Windows") stopCluster(cl)

Aún necesitará adaptar su salida.

Sección de Reseñas y Valoraciones

¡Haz clic para puntuar esta entrada!
(Votos: 2 Promedio: 4)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *