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 fg
monitoreado con htop
y 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.