jcolinge / BulkSignalR

BulkSignalR
Other
13 stars 3 forks source link

Error : Calling .buildPermutatedCountMatrix inside foreach in parallel mode #2

Open ZheFrench opened 2 years ago

ZheFrench commented 2 years ago

J'ai un bug.

Dans .getEmpiricalNullCorrLR

Erreur dans { : 
  task 1 failed - "impossible de trouver la fonction ".buildPermutatedCountMatrix""
Appels : learnParameters ... .local -> .getEmpiricalNullCorrLR -> %dopar% -> <Anonymous>
Exécution arrêtée

Ca marche en mode registerDoSEQ... mais en parallel , ça plante.

Il arrive pas à charger les functions non déclarés dans le namespace qui sont appelés depuis le foreach. Tu m'avais pas parlé d'un truc du style ?

J'ai tenté d'exporte les functions avec arg .export du foreach. Ca couine plus pour buildPermutatedCountMatrix mais ça va gueuler pour .shufflePermutationIndices qui est ensuite appelé dans buildPermutated....

    if (foreach::getDoParWorkers() > 1)
        foreach::foreach(k = seq_len(n.rand), .combine = 'c',
            .export = c(".getCorrelatedLR",".buildPermutatedCountMatrix",".shufflePermutationIndices"),
            .verbose=TRUE
            ) %dopar% {
            ncounts(r.ds) <- .buildPermutatedCountMatrix(ncounts, pindices)
            list(.getCorrelatedLR(r.ds, min.cor = min.cor))
        }

J'ai aussi tenté de charger le package BulkSignalR avec .packages mais il aime pas non plus. (à voir en passant par l'installation brut , chargeant la library et l'utilisation de .packages)

Je teste avec devtools.(vu que ça me sert pr bioconductor après) devtools::load_all(glue("pathVersPackageDIr/BulkSignalR/"),TRUE) Toi t réinstalles directement le package à chaque fois et tu tests,

Je suis pas seul. https://stackoverflow.com/questions/41117127/r-parallel-programming-error-in-task-1-failed-could-not-find-function https://stackoverflow.com/questions/42561088/nested-do-call-within-a-foreach-dopar-environment-cant-find-function-passed-w

Je mets ça la en attendant de trouver.

ZheFrench commented 2 years ago

J'ai aussi tenté de charger le package BulkSignalR avec .packages mais il aime pas non plus. (à voir en passant par l'installation brut , chargeant la library et l'utilisation de .packages)

Ok donc ça marche mais pas quand on utilise le devtools::load_all)( parcke qu'il trouve pas .packages="BulkSignalR"

    if (foreach::getDoParWorkers() > 1)
        foreach::foreach(k = seq_len(n.rand), .combine = 'c',
            .export = c(".getCorrelatedLR",".buildPermutatedCountMatrix",".shufflePermutationIndices"),
            .verbose=TRUE,.packages="BulkSignalR"
            ) %dopar% {
            ncounts(r.ds) <- .buildPermutatedCountMatrix(ncounts, pindices)
            list(.getCorrelatedLR(r.ds, min.cor = min.cor))
        }

devtools::load_all(glue("{switch}/code/refactoringPackagesR/JC/BulkSignalR/"),TRUE) Le worker ne réussit pas à trouver le package .

Learning ligand-receptor correlation null distribution... discovered package(s): automatically exporting the following variables from the local environment: min.cor, ncounts, pindices, r.ds explicitly exporting variables(s): .getCorrelatedLR, .buildPermutatedCountMatrix, .shufflePermutationIndices explicitly exporting package(s): BulkSignalR Erreur dans e$fun(obj, substitute(ex), parent.frame(), e$data) : worker initialization failed: aucun package nommé ‘BulkSignalR’ n'est trouvé Appels : learnParameters ... .local -> .getEmpiricalNullCorrLR -> %dopar% ->

ZheFrench commented 2 years ago

J'ai testé avec les functions exports. C'est pas mieux. Jgarde le loading du package via .packages="BulkSignalR" dans le call du foreach::foreach. Je laisse tomber devtools::load_all / je fais un devtools::install et je charge la library. On verra plus tard si ça génére d'autre bug quand on test pr Bioconductor.

Remove point in front of each functions, add @export . Add in Namespace... Didn't work as expected.

export(buildPermutatedCountMatrix)
export(shufflePermutationIndices)
export(getCorrelatedLR)
export(checkReceptorSignaling)