To są moje pierwsze kroki z przetwarzaniem równoległym w R. Poniższy kod powoduje następujący błąd. Nie mam pojęcia, ponieważ nie ma funkcji mclapply w tym, co napisałem, przynajmniej nie powiedziałem tego wyraźnie.równoległe pętle foreach wytwarzają błąd mclapply
Błąd:
Error in mclapply(argsList, FUN, mc.preschedule = preschedule, mc.set.seed = set.seed, :
(list) object cannot be coerced to type 'integer'
Calls: %dopar% -> <Anonymous> -> mclapply
Execution halted
Kod:
dist<-array(0, dim=c(320,500,25))
mc<-8
cl<-makeCluster(mc)
registerDoMC(cl)
opts<-list(chunkSize=10)
for(a in 1:25) {
dist[,,a]<-foreach(x=1:500, .combine='cbind', .options.mc=opts) %:%
foreach(y=1:320, .combine='c') %dopar% {
gcd.slc(crdsx[y,x], crdsy[y,x], lot[a,5], lot[a,4])
}
}
stopCluster(cl)
na innym komputerze, to działa dobrze z
registerDoParallel(cl)
zamiast
registerDoMC(cl)
czy można dodać sessionInfo() do OP? –
Gdy rejestrujesz równoległy backend z 'registerDoMC', funkcja' doMC' jest ustawiona do wykonania, gdy wywołasz funkcję '% dopar%'. 'doMC' zawiera wywołanie' mclapply', więc to jest skąd pochodzi. – BenBarnes