Ошибка при запуске 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 на узлах, и вы получите ошибку.

Другие вопросы по тегам