2016-07-19 90 views
1

這裏,我試圖通過在R中使用並行處理來翻譯文本的語言。這是我第一次使用並行處理。我的代碼是:R中的並行處理器

install.packages("RYandexTranslate") 
    install.packages("textcat") 
    install.packages("plyr") 
    install.packages("parallel") 
    library("RYandexTranslate") 
    library("textcat") 
    library("dplyr") 
    library("parallel") 
    api_key <- "trnsl.1.1.20160707T103515Z.90fa575d702ae81e.6ec78e064eb94a1c00a9bc506c615f223cf0cf5b" 
    cl <- makeCluster(4) 
    Query_L_German <- c("5 euro muenze stempelglanz","2 euro muenzen uebersicht") 
    Par_Conversion <- function(QUery_L_German) 
    { 
     for(i in 1:length(Query_L_German)) 
     { 
     x <- translate(api_key,Query_L_German[i], "de-en")$text 
     return(x) 
     } 
    } 
    a <- length(Query_L_German) 
    parLapply(cl, seq(a), function(i,Query_L_German,Par_Conversion) 
     for(i in 1:length(Query_L_German)){ 
     x <- Par_Conversion(Query_L_German) 
     return(x) 
     }, Query_L_German, Par_Conversion) 

不過,我收到以下錯誤:

Error in checkForRemoteErrors(val) : 3 nodes produced errors; first error: object 'Query_L_German' not found

回答

1

當您使用您需要定義功能和variabels功能parLapply這是內parLapply使用作了明確規定。這可以通過在函數clusterExport中定義varlist來完成。如果您想了解更多信息,請點擊這裏深入question/answer,瞭解如何使用parLapply以及其他內容。

你舉的例子可以通過插入下面的行來解決使用parLapply前:

clusterExport(cl, varlist = c("api_key","Query_L_German","translate")) 
+0

感謝丹尼爾,指出了這一點。我已經更新了代碼。你可以請現在看看它 – Akshay

+0

@Akshay好的。我現在可以重現它。請看我編輯的答案。希望現在解決。問候,丹尼爾 – Daniel

+0

謝謝丹尼爾,能否請你解釋一下這個parLapply()是如何工作的。在上面的代碼中,我可以直接使用Par_Conversion函數,也可以在parLApply()中使用此函數,但在使用parLapply()時,我看不到任何重大的執行時間改進。是否有必要將列表作爲輸入傳遞給此函數? parLapply()函數中'seq()'參數的作用是什麼? – Akshay