Ошибка при запуске sfLapply в R
Мой кусок кода выглядит так:
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 выдает ошибку?
1 ответ
Решение
Вам нужно загрузить snowfall
пакет на узлах кластера. Так вставьте
sfLibrary(snowfall)
после sfInit()
,
РЕДАКТИРОВАТЬ: Для уточнения:
Ваша функция f1
содержит функцию sfLapply
, который находится в snowfall
пакет. Когда вы инициализируете кластер с помощью sfInit
как указано выше, snow
пакет загружается на каждом узле кластера, но не snowfall
пакет. Без последнего не будет вызван объект (функция или иное) sfLapply
на узлах, и вы получите ошибку.