web-dev-qa-db-fra.com

Erreur: impossible de trouver la fonction "%>%"

Je suis un exemple dans R, en passant par les étapes et tout fonctionne jusqu'à présent, sauf que ce code produit une erreur:

 words <- dtm %>%
 as.matrix %>%
 colnames %>%
 (function(x) x[nchar(x) < 20])

Erreur: impossible de trouver la fonction "%>%"

Je ne comprends pas les avantages de l'utilisation de cet opérateur spécial %>% et tout retour serait formidable.

52
Haidar

Vous devez charger un package (tel que magrittr ou dplyr) qui définit la fonction en premier, puis qui devrait fonctionner.

install.packages("magrittr") # package installations are only needed the first time you use it
install.packages("dplyr")    # alternative installation of the %>%
library(magrittr) # needs to be run every time you start R and want to use %>%
library(dplyr)    # alternatively, this also loads %>%

L'opérateur de canal %>% a été introduit pour "réduire le temps de développement et améliorer la lisibilité et la maintenabilité du code"

Mais chacun doit décider lui-même si cela convient vraiment à son flux de travail et facilite les choses. Pour plus d'informations sur magrittr, cliquez ici .

N'utilisant pas le tube %>%, ce code renverrait la même chose que votre code:

words <- colnames(as.matrix(dtm))
words <- words[nchar(words) < 20]
words

EDIT: (J'étends ma réponse à cause d'un très utile commentaire qui a été fait par @Molx)

Bien qu’il soit de magrittr, l’opérateur de pipe est plus couramment utilisé avec le paquetage dplyr (qui nécessite et charge magrittr), donc chaque fois que vous voyez quelqu'un utiliser %>%, assurez-vous de ne devrait pas charger dplyr à la place.

85
maRtin

Sous Windows: si vous utilisez%>% dans une boucle% dopar%, vous devez ajouter une référence pour charger le package dplyr (ou magrittr, que dplyr charge).

Exemple:

plots <- foreach(myInput=iterators::iter(plotCount), .packages=c("RODBC", "dplyr")) %dopar%
{
    return(getPlot(myInput))
}

Si vous omettez la commande .packages et que vous utilisez plutôt %do% pour que tout soit exécuté en un seul processus, tout fonctionne correctement. La raison en est que tout s’exécute en un seul processus, il n’a donc pas besoin de charger spécifiquement de nouveaux packages.

12
Contango