Que signifie la fonction %>% dans R?
5 réponses
%...% des opérateurs
%>%
n'a pas de signification intégrée mais l'utilisateur (ou un paquet) est libre de définir les opérateurs de la forme %whatever%
de n'importe quelle manière qu'ils aiment. Par exemple, cette fonction retournera une chaîne de caractères comprenant son argument gauche suivi d'une virgule et d'un espace et ensuite son argument droit.
"%,%" <- function(x, y) paste0(x, ", ", y)
# test run
"Hello" %,% "World"
## [1] "Hello, World"
La base de R offre %*%
(matrice mulitiplication), %/%
(division entière), %in%
(lhs est une composante de la rhs?), %o%
(produit extérieur) et %x%
(produit kronecker). Il n'est pas clair si %%
entre ou non dans cette catégorie, mais il représente modulo.
expm le paquet r, expm, définit un opérateur de puissance à matrice %^%
. Pour un exemple, voir puissance de la matrice dans R .
opérateurs Les opérateurs package R a défini un grand nombre de tels opérateurs comme %!in%
(pour pas %in%
). Voir http://cran.r-project.org/web/packages/operators/operators.pdf
Tuyaux
magrittr dans le cas de %>%
, le paquet magrittr R l'a défini comme indiqué dans la vignette magrittr. Voir http://cran.r-project.org/web/packages/magrittr/vignettes/magrittr.html
magittr a également défini un certain nombre d'autres opérateurs. Voir la section "opérateurs de conduites supplémentaires" de la liaison antérieure qui traite de %T>%
, %<>%
et %$%
et . http://cran.r-project.org/web/packages/magrittr/magrittr.pdf pour plus de détails.
dplyr le paquet dplyr utilisé pour définir un opérateur %.%
qui est similaire; toutefois, il a été deprecated et dplyr recommandent désormais aux utilisateurs d'utiliser %>%
que dplyr importe de magrittr et met à la disposition de l'utilisateur dplyr. Comme David Arenburg l'a mentionné dans les commentaires, cette question aborde les différences entre elle et %>%
de magrittr : différences entre %.% (dplyr) et % > % (magrittr)
pipeR le paquet R, pipeR, définit un opérateur %>>%
qui est similaire à magrittr %>% et peut être utilisé comme une solution de rechange. Voir http://renkun.me/pipeR-tutorial /
le paquet pipeR a également défini un certain nombre d'autres opérateurs de ce type. Voir: http://cran.r-project.org/web/packages/pipeR/pipeR.pdf
wrapr le paquet R, wrapr, définit un tube à points %.>%
qui est une version explicite de %>%
en ce qu'il ne faire l'insertion implicite des arguments, mais remplace seulement les utilisations explicites de point sur le côté droit. Cela peut être considéré comme une autre alternative à %>%
. Voir https://winvector.github.io/wrapr/articles/dot_pipe.html
Bizarro pipe . Ce n'est pas vraiment une pipe mais plutôt une syntaxe de base intelligente pour fonctionner d'une manière similaire aux pipes sans réellement utiliser les pipes. Il est discuté dans http://www.win-vector.com/blog/2017/01/using-the-bizarro-pipe-to-debug-magrittr-pipelines-in-r / l'idée est qu'au lieu d'écrire:
1:8 %>% sum %>% sqrt
## [1] 6
on écrit ce qui suit. Dans ce cas, nous utilisons explicitement dot plutôt que d'éliminer l'argument dot et de terminer chaque composant du pipeline par une assignation à la variable dont le nom est dot ( .
) . Nous suivons cela avec un point-virgule.
1:8 ->.; sum(.) ->.; sqrt(.)
## [1] 6
Mise à jour ajout d'informations sur le paquet expm et exemple simplifié en haut.
ma compréhension après avoir lu le lien offert par G. Grothendieck est que %>% est un opérateur qui fonctionne pipes afin d'améliorer la lisibilité et la productivité car il est plus facile de suivre le flux de fonctions multiples à travers ces pipes que de revenir en arrière lorsque les fonctions multiples sont emboîtées.
%>%
est similaire à un tuyau en Unix. Par exemple, dans
a <- combined_data_set %>% group_by(Outlet_Identifier) %>% tally()
la sortie de combined_data_set
va dans group_by
et sa sortie va dans tally
, puis la sortie finale est assignée à a
.
cela vous donne pratique et la manière facile d'utiliser des fonctions en série sans créer de variables et de stocker des valeurs intermédiaires.
Le tuyau %>%
passe la trame de données de sortie que les résultats de la fonction, juste avant le tuyau à l'entrée comme premier argument de la fonction à droite après la pipe.
les paquets R dplyr et sf importent l'opérateur % > % du paquet R magrittr.
aide est disponible en utilisant la commande suivante:
?'%>%'
bien sûr, le colis doit être chargé avant en utilisant par exemple
library(sf)
la documentation de l'opérateur de conduite avant magrittr donne un bon exemple: Lorsque les fonctions ne nécessitent qu'un seul argument, x % > % f est équivalent à f (x)