Je crée une fonction (myFUN) qui appelle parallel::parApply à un moment donné, avec une fonction yourFUN qui est fournie comme argument.
Dans de nombreuses situations, votreFUN contiendra des fonctions personnalisées de l'environnement global.
Ainsi, alors que je peux passer "yourFUN" à parallel::clusterExport, je ne peux pas connaître à l'avance les noms des fonctions qu'il contient, et clusterExport me renvoie une erreur car il ne peut pas les trouver.
Je ne veux pas exporter l'ensemble de l'environnement de votreFUN , car il pourrait être très grand.
Existe-t-il un moyen pour moi d'exporter uniquement les variables nécessaires à l'exécution de votreFUN ?
La fonction réelle est très longue, voici un exemple minimisé de l'erreur :
mydata <- matrix(data = 1:9, 3, 3)
perfFUN <- function(x) 2*x
opt_perfFUN <- function(y) max(perfFUN(y))
avg_perfFUN <- function(w) perfFUN(mean(w))
myFUN <- function(data, yourFUN, n_cores = 1){
cl <- parallel::makeCluster(n_cores)
parallel::clusterExport(cl, varlist = c("yourFUN"), envir = environment())
parallel::parApply(cl, data, 1, yourFUN)
}
myFUN(data = mydata, yourFUN = opt_perfFUN)
myFUN(data = mydata, yourFUN = avg_perfFUN)
Error in checkForRemoteErrors(val) : one node produced an error: could not find function "perfFUN"
Merci beaucoup !