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)
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? –
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. –