Permítanme agregar otro problema de alcance en R, esta vez con el paquete de nevadas. Si defino una función en mi entorno global, y trato de usar que uno más tarde en un sfApply() dentro de otra función, mi primera función no se encuentra nada más:Problema de alcance cuando se usa sfApply dentro de la función (paquete de nevadas - R)
#Runnable code. Don't forget to stop the cluster with sfStop()
require(snowfall)
sfInit(parallel=TRUE,cpus=3)
func1 <- function(x){
y <- x+1
y
}
func2 <- function(x){
y <- sfApply(x,2,function(i) func1(i))
y
}
y <- matrix(1:10,ncol=2)
func2(y)
sfStop()
Esto da:
> func2(y)
Error in checkForRemoteErrors(val) :
2 nodes produced errors; first error: could not find function "func1"
Sin embargo, si anulo mi función dentro de la otra función, funciona. También funciona cuando uso sfApply() en el entorno global. La cosa es que no quiero anidar mi función func1 dentro de esa función2, ya que eso causaría que func1 se defina muchas veces (func2 se usa en una estructura tipo bucle).
He intentado ya simplificar el código para deshacerme del doble bucle, pero eso es completamente imposible debido a la naturaleza del problema. ¿Algunas ideas?
en el '.GlobalEnv' es perfecto. Agregué un pequeño ejemplo. ¡Gracias! –
@Joris, de nada. Lamento no haber explicado por qué necesita exportar, pero afortunadamente Dirk brindó esa información. ;-) –