2017-09-04 4 views
0

다음 코드는 ddply가 병렬 처리되지 않은 경우에만 작동합니다. 즉, ddply(..., .parallel = FALSE). .parallel=TRUE 일 때 왜 작동하지 않습니까? 수행 할 계산이 있는데 병렬 처리가 필요하고 ddply가 완벽하기는하지만 ddply를 사용하여 tryCatch() 문을 포함하는 함수를 병렬 처리하는 방법을 알아낼 수 없습니다. 마치 코드가 tryCatch() 내에 있다는 사실을 무시하는 것처럼 보입니다.병렬화 된 ddply 내에서 tryCatch()가 작동하지 않음

# 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

예 - 이것은 중복입니다. 죄송합니다! 나는 꽤 오랫동안 주변을 둘러 보았고 그 하나를 보지 않았다 - 많은 사과. 질문을 삭제해야합니까? –

+0

Nop 당신은 그것을 떠날 수 있다고 생각합니다. 때때로 여러 가지 방법으로 문제를 검색하는 것이 유용합니다. 그들은 당신의 질문을 우연히 만나면 그냥 방향이 바뀔 것입니다. –

답변

0

모든 message() 호출을 제거해야합니다.