2017-01-19 23 views
1

Это фрагмент кода R (функция «Kclust»), который пытается выполнить задачу параллельно с помощью библиотеки (doParallel).R parallel: ошибка «не удалось найти функцию»% do% »«

result = foreach (r = rseq, .combine=c) %dopar% { 
    K=apply(D, 1, function(v){sum(v <= r)-1}) 
    L=sqrt((diff(xlim)+2*max(rseq))*(diff(ylim)+2*max(rseq))* K /(pi * (dim(tor)[1]-1))) 
    foreach (th = thseq) %do% { 
     C=which(L>=th) 
     if (length(C)>0){ 
     G = graph.adjacency(D[C,C] < 2 *r) 
     lab=clusters(G, "weak") 
     labels=(N+1):(2*N); labels[C]=lab$membership 
     } 
     else labels=1:N 
     s=0 
     if (score){ 
     s=scorewprec(labels=labels, pts=pts, sds=sds, xlim=xlim, ylim=ylim, psd=psd, minsd=minsd, maxsd=maxsd, useplabel=useplabel, alpha=alpha, pb=pb) 
     } 
     list("scale" = r, "score" = s, "thresh" = th, "labels" = labels) 
    } 
    } 

код прекрасно работает с:

R версии 3.0.2 (2013-09-25) - "Фрисби Sailing". Платформа: x86_64-рс-Linux-гну (64-разрядная версия)

Однако, если я запускаю код:

R версия 3.2.3 (2015-12-10) - «Деревянные Кристмас Дерево». Платформа: x86_64-w64-mingw32/x64 (64-разрядная версия).

я

Ошибки в {: задача-не удалось - "не удалось найти функцию "% делают%"" вызовов: sapply -> lapply -> FUN -> Kclust ->% dopar% - > Выполнение приостановлено

В чем может быть проблема?

+2

Пакет 'foreach' не был экспортирован рабочим. – Roland

+0

@Roland благодарит за комментарий. Можете быть более конкретными? – Michael

ответ

1

как @Roland, упомянутый в его комментарии, вы должны экспортировать пакет foreach отдельным работникам. Это можно сделать так:

result = foreach (r = rseq, .combine=c, .packages = c("foreach")) %dopar% { 
    #some code... 
    # now use the foreach function from the foreach package again 
    foreach (th = thseq) %do% { 
    #... 
    } 
} 

так же, как это, вы должны экспортировать все используемые библиотеки для рабочих в качестве вектора символов. Поэтому я добавил c("packageA", "packageB", "etc.").