Que signifie la fonction %>% dans R?

j'ai vu l'utilisation de la fonction %>% (pourcentage supérieur au pourcentage) dans certains colis comme dplyr et rvest 151950920" . Ça veut dire quoi? Est-ce une façon d'écrire des blocs de fermeture en R?

56
demandé sur nbro 2014-11-25 14:37:19

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.

92
répondu G. Grothendieck 2018-03-21 11:44:54

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.

10
répondu Francisco López-Sancho 2017-12-13 22:27:31

%>% 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.

4
répondu RAJAT BHATHEJA 2018-09-27 01:37:31

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.

For Example

0
répondu Jordan 2018-07-15 12:13:48

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)

0
répondu HKE 2018-09-02 12:46:10