让我在 R 中添加另一个范围问题,这次是降雪包。如果我在全局环境中定义了一个函数,并且稍后在另一个函数内的 sfApply() 中尝试使用该函数,则不再找到我的第一个函数:
#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()
这给出了:
> func2(y)
Error in checkForRemoteErrors(val) :
2 nodes produced errors; first error: could not find function "func1"
但是,如果我将我的函数嵌套在另一个函数中,它就可以工作。当我在全局环境中使用 sfApply() 时,它也可以工作。问题是,我不想将我的函数 func1 嵌套在该函数 2 中,因为这会导致 func1 被多次定义(func2 用于类似循环的结构中)。
我已经尝试简化代码以摆脱双循环,但由于问题的性质,这是完全不可能的。有任何想法吗?