2015-10-13 1 views
-1

J'essaie d'exécuter une boucle dans R pour la détection de chaîne sur plusieurs cœurs en utilisant foreach mais je vois qu'elle ne fonctionne que sur un seul noyau et je n'ai pas pu l'amener à fonctionner sur plusieurs cœurs noyaux.Comment utiliser R str_detect sur plusieurs cœurs

library("parallel") 
library("foreach") 
library("doParallel") 

#How to detect how many cores are on the server 
detectCores() 

cl <- makeCluster(3) 
registerDoParallel(cl) 

x<-c("Hello My Name is", "Happy Birthday", "Hi How are you today? My Name is walley", "Nice to meet you", "Best friends") 
y<-c("Hello", "Birthday", "Hi", "Nice", "Best friends") 

foreach(i = 1:length(y)) %dopar%{ 

print(i) 
if (sum(str_detect(x,paste("\\b",as.character(y),"\\b", sep=""))) > 0){ 

    str_replace(x[i], as.character(y[which(str_detect(x[i],paste("\\b",as.character(y),"\\b", sep="")) == TRUE)]), "") 
    } 
} 

write.csv(mycatalog, "Matching.csv") 
getDoParWorkers() 

stopCluster(cl) 
+1

Ce n'est pas reproductible. Veuillez résumer votre exemple à un petit exemple, "reproductible". –

+0

[Comment faire un grand exemple R reproductible?] (Http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) – zx8754

+0

Ok c'est le nouveau modifié et plus facile code. J'ai créé deux vecteurs x et y et mon idée est de faire la correspondance de chaque élément de y s'il est rencontré dans x et de remplacer cet élément. – Micmic

Répondre

0

Je suppose que la boucle ne soit pas exécuté en parallèle parce que vous essayez de modifier un seul tableau (x) de tous les fils.

Effectuez les opérations suivantes et voir si cela résout votre problème

modifiedX = foreach(i = 1:length(y), .combine = c) %dopar%{ 

    stringCopy = x[i] 

    if (sum(str_detect(x,paste("\\b",as.character(y),"\\b", sep=""))) > 0) {  
    str_replace(stringCopy, as.character (y[which(str_detect(x[i],paste("\\b",as.character(y),"\\b", sep="")) == TRUE)]), "") 
    } 

    return(stringCopy) 

} 

print(modifiedX) 
+0

bien que j'ai essayé et cela n'a pas fonctionné – Micmic