r

Función no encontrada en R doParallel ''foreach''-Error en{: tarea 1 fallida-"no se pudo encontrar la función" raster "”



(1)

En la cran.r-project.org/web/packages/foreach/vignettes/foreach.pdf y la página de ayuda de foreach, el argumento .packages se señala como necesario para proporcionar cuando se usan cálculos paralelos con funciones que no están cargadas de forma predeterminada. Entonces tu código en el primer ejemplo debería ser:

ptime<-system.time({ r <- foreach(z = 1:length(files), .combine=cbind, .packages=''raster'') %dopar% { # some code # and more code } })

Alguna explicación más

El paquete foreach hace un montón de configuración detrás de las escenas. Lo que sucede es lo siguiente (en principio, los detalles técnicos son un poco más complicados):

  • foreach configura un sistema de "trabajadores" que puede ver como sesiones R separadas que están comprometidas con un núcleo diferente en un clúster.

  • La función que debe llevarse a cabo se carga en cada sesión de "trabajador", junto con los objetos necesarios para llevar a cabo la función

  • Cada trabajador calcula el resultado para un subconjunto de los datos.

  • Los resultados del cálculo de los diferentes trabajadores se reúnen y se informan en la sesión "maestra" R.

Como los trabajadores pueden verse como sesiones R separadas, los paquetes de la sesión "maestra" no se cargan automáticamente. Debe especificar qué paquetes deben cargarse en esas sesiones de trabajo, y para eso se .package argumento .package de foreach .

Tenga en cuenta que cuando use otros paquetes (por ejemplo, parallel o snowfall ), deberá configurar estos trabajadores explícitamente y también encargarse de pasar objetos y cargar paquetes en las sesiones de trabajo.

Estoy tratando de usar un clúster de alto rendimiento en mi institución por primera vez y tengo un problema que no puedo resolver.

El siguiente código devuelve un error:

ptime<-system.time({ r <- foreach(z = 1:length(files),.combine=cbind) %dopar% { raster <- raster(paste(folder,files[1],sep="")) data<-getValues(raster) clp <- na.omit(data) for(i in 1:length(classes)){ results[i,z]<-length(clp[clp==classes[i]])/length(clp) print(z) } } }) Error in { : task 1 failed - "could not find function "raster""

También probé un código de foreach diferente para otra tarea que tengo:

r <- foreach (i=1:length(poly)) %dopar% { clip<-gIntersection(paths,poly[i,]) lgth<-gLength(clip) vid<-poly@data[i,3] path.lgth[i,] <- c(vid,lgth) print(i) }

y esta vez no se encuentra la función gIntersection. Obviamente los paquetes están todos instalados y cargados. Después de leer algunos mensajes del foro, parece que tiene que ver con el entorno en el que se ejecutan / operan las funciones.

¿Puede ayudarme alguien, por favor? ¡No soy un programador!

¡Gracias!

Actualizar:

He ajustado mi código para la solución provista:

results<-matrix(nrow=length(classes),ncol=length(files)) dimnames(results)[[1]]<-classes dimnames(results)[[2]]<-files ptime<-system.time({ foreach(z = 1:length(files),.packages="raster") %dopar% { raster <- raster(paste(folder,files[z],sep="")) data<-getValues(raster) clp <- na.omit(data) for(i in 1:length(classes)){ results[i,z]<-length(clp[clp==classes[i]])/length(clp) print(z) } } })

Pero lo que obtengo es una salida (mi matriz de resultados) llena de na. Como puede ver, creo un objeto de matriz llamado resultados para rellenar con los resultados (que funciona con los bucles), pero después de leer la documentación de foreach parece que guarda los resultados de manera diferente con esta función.

¿Y consejos sobre lo que debería elegir para el argumento .combine?