2016-07-19 3 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

При использовании функции parLapply вам необходимо определить функцию и variabels, которые используются в parLapply явно. Это можно сделать, определив varlist в функции clusterExport. Ниже приведено подробное описание question/answer о том, как это сделать и другие вещи с parLapply, если вы хотите больше узнать.

Ваш пример может быть решена путем введения следующей строки перед тем parLapply используется:

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

Спасибо Даниил, указывают на это. Я обновил код. Не могли бы вы заглянуть в него сейчас? – Akshay

+0

@Akshay Ok. Я могу воспроизвести его сейчас. Посмотрите мой отредактированный ответ. Надеюсь, он сейчас решен. Привет, Даниэль – Daniel

+0

Спасибо, Дэниэл, Не могли бы вы объяснить мне, как работает этот parLapply(). В приведенном выше коде я могу использовать функцию Par_Conversion напрямую или использовать эту функцию в parLApply(), но я не вижу существенного улучшения времени выполнения, когда я использую parLapply(). Нужно ли передавать список в качестве входных данных для этой функции? Какова роль параметра seq() в функции parLapply()? – Akshay

Смежные вопросы