1

我的一段代码如下所示:

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 会抛出错误?

4

1 回答 1

3

您需要snowfall在集群节点上加载包。所以插入

sfLibrary(snowfall)

之后sfInit()


编辑:澄清:

您的函数f1包含在包sfLapply中找到的函数。snowfall当您使用sfInit上述方法初始化集群时,会在集群的snow每个节点上加载包,而不是snowfall包。sfLapply如果没有后者,则节点上不会调用任何对象(函数或其他) ,并且您会收到错误消息。

于 2012-12-14T09:57:27.577 回答