##### Ejemplo 1 ##### # rnorm(x) produce x valores aleatorios normales(0,1) library(parallel) ncores <- detectCores(logical = FALSE) cl <- makeCluster(ncores) clusterApply(cl, x = 1:ncores, fun = rnorm) stopCluster(cl) ##### Ejemplo 2 ##### no.estandares = function(x,a,b){ if(x==1) y = rnorm(5,a,b) if(x==2) y = rnorm(3,a,b) if(x==3) y = rnorm(1,a,b) if(x==4) y = rnorm(7,a,b) return(y) } library(parallel) ncores <- detectCores(logical = FALSE) cl <- makeCluster(ncores) clusterApply(cl, x = 1:4, fun = no.estandares,2,7) stopCluster(cl) ##### Ejemplo 3 ##### library(readr) datos = read_csv("~/Desktop/R ZORA Ejemplos/Clase 1/minitrain.csv" ) datos_1 = read_csv("~/Desktop/R ZORA Ejemplos/Clase 1/minitrain.csv", skip = 1,n_max = 100,col_names = FALSE) datos_2 = read_csv("~/Desktop/R ZORA Ejemplos/Clase 1/minitrain.csv", skip = 101,n_max = 100,col_names = FALSE) # Veamos una pedazo de la matriz datos_1[1:3,1:3] datos_2[1:3,1:3] leer_trozo = function(archivo,parte,longitud){ trozo = read_csv(archivo, skip = (parte-1)*longitud+1,n_max = longitud,col_names = FALSE) return(trozo) } # Le indico que lea el 2do trozo y de 100 en 100 a = leer_trozo("~/Desktop/R ZORA Ejemplos/Clase 1/minitrain.csv",2,100) a[1:3,1:3] funA = function(archivo,parte,longitud) { M = leer_trozo(archivo,parte,longitud) s = sum( M[,5] + M[,7],na.rm = TRUE) return(s) } funB = function(archivo,parte,longitud) { N = leer_trozo(archivo,parte,longitud) p = sum( N[,6] *N[,10],na.rm = TRUE) return(p) } library(parallel) ncores <- detectCores(logical = FALSE) cl <- makeCluster(ncores) trozo = clusterApply(cl, x = 1:4, fun = funA,archivo="~/Desktop/R ZORA Ejemplos/Clase 1/minitrain.csv",longitud=100) # !!!! Que sucede con la funcion leer_trozo ??? # Hay que pasarla la cluster clusterExport(cl,c('leer_trozo')) trozo = clusterApply(cl, x = 1:4, fun = funA,archivo="~/Desktop/R ZORA Ejemplos/Clase 1/minitrain.csv",longitud=100) # Tambien hay que pasar la funcion read_csv clusterExport(cl,c('leer_trozo','read_csv')) trozo = clusterApply(cl, x = 1:4, fun = funA,archivo="~/Desktop/R ZORA Ejemplos/Clase 1/minitrain.csv",longitud=100) trozo #resultado = sum(trozo)# resultado = sum(unlist(trozo)) resultado stopCluster(cl) cl <- makeCluster(ncores) clusterExport(cl,c('leer_trozo','read_csv')) trozo = clusterApply(cl, x = 1:4, fun = funA,archivo="~/Desktop/R ZORA Ejemplos/Clase 1/minitrain.csv",longitud=100) trozo resultado = sum(unlist(trozo)) resultado stopCluster(cl) cl <- makeCluster(ncores) clusterExport(cl,c('leer_trozo','read_csv')) trozo = clusterApply(cl, x = 1:10, fun = funA,archivo="~/Desktop/R ZORA Ejemplos/Clase 1/minitrain.csv",longitud=100) stopCluster(cl) trozo ##### Ejemplo 4 ##### ### Secuencial ### k = 30 trozo_sec = list(k) t1 = Sys.time() for(j in 1:k) { trozo_sec[[j]] = funA("~/Desktop/R ZORA Ejemplos/Clase 1/minitrain.csv",j,longitud=100) } t2 = Sys.time() resultado_sec = sum(unlist(trozo_sec)) resultado_sec tf = t2-t1 tf ### Paralelo ### k = 30 library(parallel) ncores <- detectCores(logical = FALSE) cl <- makeCluster(ncores) clusterExport(cl,c('leer_trozo','read_csv')) v1 = Sys.time() trozo_par = clusterApply(cl, x = 1:k, fun = funA,archivo="~/Desktop/R ZORA Ejemplos/Clase 1/minitrain.csv",longitud=100) v2 = Sys.time() trozo_par resultado_par = sum(unlist(trozo_par)) resultado_par stopCluster(cl) vf = v2-v1 vf ##### ComparaciĆ³n ##### c(tf,vf) as.numeric(tf)/as.numeric(vf)