2017-12-29 9 views
0

Hier habe ich eine Funktion mit dem Namen f() zum Beispiel, und ich importiere einige Pakete, die ich brauche. Außerdem habe ich eine Funktion namens g() in f() definiert. Aber ich finde g() kann nicht die Funktionen verwenden, die in den Paketen definiert sind, die ich vorher importiere, wenn ich das g parallel machen möchte.Warum kann die Funktion in einer Funktion nicht die Umgebung ihrer Elternfunktion in R während der parallelen Ausführung verwenden

f=function() 
{ 
    command 1... 
    library(pkg1)... # there is a function named t(),for example 
    library(pkg2)... 
    g=function(x) 
    { 
     t() # function from pkg1 
    } 
    library(parallel) 
    cl <- makeCluster(core,outfile="") 
    result=parLapply(cl,x,g) # error, the t is not defined 
    stopCluster(cl) 

} 

Antwort

0

Sie haben die Funktion und die Bibliothek mit dem Cluster exportieren, zum Beispiel:

cl <<- makeCluster(length(Tasks), type = "PSOCK") 
clusterEvalQ(cl,c(library(httr),library(XML),library(magrittr),library(xml2))) 

clusterEvalQ (cl, expr) exportiert die zum Cluster aufgeführt Bibliotheken so kann es verwenden, Sie. Sie müssen das gleiche mit Variablen nur unter Verwendung tun clusterExport (Cl, Varlist)

Verwandte Themen