2017-09-04 5 views
0

Der folgende Codeabschnitt funktioniert nur, wenn ddply nicht parallelisiert ist; d.h. ddply(..., .parallel = FALSE). Warum funktioniert es nicht, wenn .parallel=TRUE? Ich habe eine Berechnung durchzuführen, die Parallelisierung erfordert und ddply ist perfekt dafür, aber ich kann nicht herausfinden, wie man eine Funktion, die eine tryCatch()-Anweisung mit ddply enthält, parallelisiert. Es ist, als würde ddply die Tatsache ignorieren, dass der Code innerhalb einer tryCatch() liegt.tryCatch() funktioniert nicht, wenn es innerhalb parallelisierter ddply verwendet wird

# tryCatch in ddply 

library(plyr) 
library(dplyr) 
library(reshape2) 
library(parallel) 
library(doParallel) 

theFunc <- function(df){ 
    m <- df$a 
    m <- tryCatch(
    {if(m>1){ 
     # do something normal 
     m+1 
    }else{ 
     # do something that throws an error 
     m+"mehwhatever" 
    } 
    }, 
    warning=function(war){ 
     message(war) 
     m <- df$a 
     return(m) 
    }, 
    error=function(cond) { 
     message(cond) 
     m <- df$a 
     return(m) 
    }, 
    finally={ 
     print("Does this even work?") 
     print(m) 
     } 
) 
    df$a <- m 
    return(df) 
} 

df <- data.frame(a=1:10) 

print(df) 
nodes <- detectCores(logical = FALSE) 
cl <- makeCluster(nodes) 
registerDoParallel(cl) 

df <- ddply(.data = df,.variables = c("a"),.fun = function(x){return(theFunc(x))},.parallel = TRUE,.paropts = list(.export=c(as.vector(lsf.str())))) 

parallel::stopCluster(cl) 
print(df) 
+0

Ja - das ist ein Duplikat. Es tut uns leid! Ich schaute mich eine ganze Weile um und stieß auf diesen einen - viele Entschuldigungen. Soll ich nur die Frage entfernen? –

+0

Nop du kannst es verlassen denke ich. Manchmal ist es nützlich, nach einem Problem zu suchen. Sie werden nur umgeleitet, wenn sie auf Ihre Frage stoßen. –

Antwort

0

Alle Aufrufe von Message() müssen entfernt werden.

Verwandte Themen