我的代码如下:
x<- c(1,2,3,4,5)
library(snowfall)
f1<- function(a,list){
f2<-function(b,num){ return(abs(num-b))}
l1<-sfLapply(list, f2, num=a)
l1<-sum(unlist(l1))
return(l1)
}
sfInit(parallel=TRUE,cpus=4)
l2<-(sfLapply(x, f1, list=x))
sfStop()
l2
当我运行最后四行时,它会出错:
l2<-(sfLapply(x, f1, list=x))
Error in checkForRemoteErrors(val) :
4 nodes produced errors; first error: could not find function "sfLapply"
当我切换到顺序处理时,使用lapply,它运行得很好。
> l2<-(lapply(x, f1, list=x))
> l2
[[1]]
[1] 10
[[2]]
[1] 7
[[3]]
[1] 6
[[4]]
[1] 7
[[5]]
[1] 10
为什么sfLapply会抛出错误?
答案 0 :(得分:3)
您需要在群集节点上加载snowfall
包。所以插入
sfLibrary(snowfall)
在sfInit()
之后。
编辑:澄清:
您的函数f1
包含函数sfLapply
,该函数位于snowfall
包中。如上所述使用sfInit
初始化集群时,snow
软件包将加载到集群的每个节点上,但不会加载snowfall
软件包。如果没有后者,节点上没有名为sfLapply
的对象(函数或其他),您就会收到错误。