mam funkcję zawiera pętlępętli wewnątrz pętli foreach stosując doparallel
myfun = function(z1.d, r, rs){
x = z1.d[,r]
or.d = order(as.vector(x), decreasing=TRUE)[rs]
zz1.d = as.vector(x)
r.l = zz1.d[or.d]
y=vector()
for (i in 1:9)
{
if(i<9) y[i]=mean(x[(x[,r] >= r.l[i] & x[,r] < r.l[i+1]),r]) else{
y[i] = mean(z1.d[(x >= r.l[9]),r])}
}
return(y)
}
RS jest wektorem numeryczne z1.d jest zoo i y jest również wektor numeryczne.
Gdy próbuję uruchomić funkcję wewnątrz pętli równoległej:
cls = makePSOCKcluster(8)
registerDoParallel(cls)
rlarger.d.1 = foreach(r=1:dim(z1.d)[2], .combine = "cbind") %dopar% {
myfun(z1.d, r, rs)}
stopCluster(cls)
pojawia się następujący błąd:
Error in { : task 1 failed - "incorrect number of dimensions"
nie wiem dlaczego, ale zdałem sobie sprawę, jeśli biorę pętla z mojej funkcji nie daje błędu.
Również, jeśli uruchomię dokładnie ten sam kod z% do% zamiast% dopar% (więc nie działa równolegle) działa dobrze (wolno, ale bez błędów).
EDIT: zgodnie z wnioskiem o to próbka z parametrów:
dim(z1.d)
[1] 8766 107
> z1.d[1:4,1:6]
AU_10092 AU_10622 AU_12038 AU_12046 AU_13017 AU_14015
1966-01-01 23:00:00 NA NA NA 1.816 0 4.573
1966-01-02 23:00:00 NA NA NA 9.614 0 4.064
1966-01-03 23:00:00 0 NA NA 0.000 0 0.000
1966-01-04 23:00:00 0 NA NA 0.000 0 0.000
> rs
[1] 300 250 200 150 100 75 50 30 10
R jest zdefiniowana w pętli foreach
Pomocne byłoby przykładowe wprowadzenie parametrów z1.d, rs, r. – TUSHAr
@sbg - Jakiego systemu operacyjnego używasz? W kontekście równoległego wykonywania, te punkty mają znaczenie. Ponieważ systemy Windows, Linux i MacOS mają w niektórych przypadkach różne implementacje równoległe udostępniane przez R. – Technophobe01
używam go w oknach – sbg