À l'aide de parLapply et clusterExport l'intérieur d'une fonction

J'ai posé une question liée à l'ici et la réponse a bien fonctionné: en utilisant en parallèle du parLapply: impossible d'accéder à des variables au sein du code en parallèle

Le problème est que lorsque j'essaie d'utiliser la réponse à l'intérieur de la fonction, ça ne marchera pas car je pense qu'il a à l'environnement par défaut de clusterExport. J'ai lu la vignette et regarda le fichier d'aide, mais je suis approcher de ce avec un nombre très limité de la base de connaissances. La façon dont j'ai utilisé parLapply j'ai attendu qu'elle se comportent de manière semblable à lapply mais il ne semble pas.

Voici ma tentative:

par.test <- function(text.var, gc.rate=10){ 
    ntv <- length(text.var)
    require(parallel)
    pos <-  function(i) {
        paste(sapply(strsplit(tolower(i), " "), nchar), collapse=" | ")
    }
    cl <- makeCluster(mc <- getOption("cl.cores", 4))
    clusterExport(cl=cl, varlist=c("text.var", "ntv", "gc.rate", "pos"))
    parLapply(cl, seq_len(ntv), function(i) {
            x <- pos(text.var[i])
            if (i%%gc.rate==0) gc()
            return(x)
        }
    )
}

par.test(rep("I like cake and ice cream so much!", 20))

#gives this error message
> par.test(rep("I like cake and ice cream so much!", 20))
Error in get(name, envir = envir) : object 'text.var' not found
  • On dirait que vous devez utiliser le envir argument clusterExport comme varlist est exporté à partir du .GlobalEnv par défaut. Ne envir=environment() travail?
  • GSee j'ai monkied autour de la lecture et de recherche pour les 3 heures. Je ne suis pas vraiment bon avec l'environnement des trucs, mais qui fonctionne parfaitement. Pouvez-vous ajouter comme une réponse et je vais le marquer comme correcte.
  • J'ai fait un post de blog sur mon apprentissage avec cette pour de futurs chercheurs: trinkerrstuff.wordpress.com/2012/08/19/...
InformationsquelleAutor Tyler Rinker | 2012-08-19