Je veux retourner NULL avec une fonction personnalisée utilisée dans une boucle parallèle foreach
. L'utilisation est que, si certains résultats ne remplissent pas certains critères, ce résultat ne sera pas stocké et il sera filtré comme une étape de post-traitement.Comment retourner null pour la fonction personnalisée utilisée dans% dopar%?
Cependant, retourne mon programme
tâche 1 a échoué - "remplacement a une longueur zéro"
Le problème peut être reproduit avec le code suivant:
library(doParallel)
Input <- c(F,T,F)
f.parallel <- function(x){
ifelse(x,T,NULL)
}
no_cores <- detectCores()-1
# for mac OS, linux
c1 <- makeCluster(no_cores,type = "FORK")
# for windows
# cl <- makeCluster(no_cores)
# clusterExport(cl, list("Input","f.parallel"))
registerDoParallel(cl)
output <- foreach(i=1:length(Input),.combine = cbind) %dopar% f.parallel(Input[i])
stopCluster(c1)
cela fonctionne avec '' 'if (x) T'''. mais je pense que ifelse() peut retourner NULL. mais ça ne marche pas avec% dopar%. si je change à% do%, cela fonctionne alors. mais pourquoi est-ce ainsi? – HappyCoding
C'est étrange. Ni% do% ni 'ifelse (TRUE, NULL, 1)' ne fonctionne pour moi. – coletl
peut-être différentes versions? Savez-vous comment passer le nom de la colonne à la valeur dans la fonction personnalisée? – HappyCoding