# data[].attributes.body
Se eliminar lo que se tiene en memoria con la función rm( )

# data[].attributes.body
sapply es una versión simplificada de lapply, que aplica la función lapply y estudia la salida. Cuando entiende que dicha salida admite una representación mas simple que la lista, la simplifica.

parSapply(cl, airquality[, 1:4], mean, na.rm = TRUE)

Par-apply, con balance de carga

parLapplyLB(cl, airquality[, 1:4], mean, na.rm = TRUE)

# data[].attributes.body
Además, se presenta la forma paralelizada de Lapply con parLapply

parLapply(cl, airquality[, 1:4], mean, na.rm = TRUE)

# data[].attributes.body
Se presenta la versión paralelizada del método:

Apply aplica una función a cada elemento de una lista o vector. En este ejemplo se calcula la media de cada una de las cuatro primeras columnas de airquality. El argumento adicional, na.rm = TRUE se pasa a la función mean. Devuelve una lista.

parApply(cl, airquality[, 1:4], 2, mean, na.rm = TRUE)

# data[].attributes.body
Versiones paralelas de apply(), con un argumento adicional para operar con el grupo de procesadores definido.

parApply, paralela de apply

parLapply, paralela de lapply

parSapply, paralela de sapply

# data[].attributes.body
Cargar librerías en los procesadores

clusterEvalQ(cl, {
  library(ggplot2)
  library(boot)
})

# data[].attributes.body
clusterExport exporta una variable a los procesadores

clusterExport(cl, "x")
clusterEvalQ(cl, x)

# data[].attributes.body
--------------
3.1 - ClusterEvalQ
Para trabajar de forma paralela, se deben de cargar todos los paquetes variables en todos los procesadores. La función clusterEvalQ ejecuta la expresión en cada procesador:

cl <- makeCluster(4, type="PSOCK")
clusterEvalQ(cl, 2 + 2)

La variable "y" no existe en el procesador principal.

clusterEvalQ(cl, y <- 1)clusterEvalQ(cl, y <- 1)

# data[].attributes.body
A continuación, se crean los clusters para ejecutarse en paralelo

cl <- makeCluster(4)
# código a ejecutar en paralelo
stopCluster(cl)

# data[].attributes.body
Se carga la librería parallel y se detectan los núcleos físicos que posee la computadora:

library(parallel)
detectCores(logical = FALSE) #cores fisicos

Posteriormente, a modo de prueba, se pueden comprobar los núcleos lógicos con lo que se dispone para trabajar:

detectCores()

# data[].attributes.body
Inicia un cluster con n nodos

Ejecuta código de pre-procesamiento en cada nodo (cargar un paquete)

Use par-apply en lugar de -apply

Pare o cierre el cluster

# data[].attributes.body
1. Socket: inicia una nueva versión de R en cada procesador.

2. Fork: copia la sesión actual de R en los procesadores.

# data[].attributes.body
1. Parallel

Multicore: memoria compartida, sistemas unix

Snow: memoria distribuida,sistemas unix y windows

# data[].attributes.body
Funciones con argumentos de paralelización

Librerías para paralelizar en PC (memoria compartida)

Librerias para cluster (memoria distribuida)