Que signifie la fonction%>% dans R?

119

J'ai vu l'utilisation de la fonction %>%(pourcentage supérieur à pourcentage) dans certains paquets comme dplyr et rvest . Qu'est-ce que ça veut dire? Est-ce un moyen d'écrire des blocs de fermeture dans R?

Alfakini
la source
10
ou regardez?'%>%'
jbaums
6
Merci David! jbaums, malheureusement il n'y a pas de doc à ce sujet. ? '%>%' renvoie "Aucune documentation pour '%>%' dans les packages et bibliothèques spécifiés"
alfakini
6
@alf. vous devez library(magrittr)ou d' library(dplyr)abord, puis exécutez ?'%>%', bien que mon lien fournisse plus d'informations
David Arenburg
1
Jetez également un œil ici
David Arenburg
1
En relation: Que signifie%>% dans R
Joshua Ulrich

Réponses:

141

%...% les opérateurs

%>%n'a pas de signification intégrée mais l'utilisateur (ou un package) est libre de définir les opérateurs du formulaire %whatever%comme il le souhaite. Par exemple, cette fonction retournera une chaîne composée de son argument gauche suivi d'une virgule et d'un espace, puis de son argument droit.

"%,%" <- function(x, y) paste0(x, ", ", y)

# test run

"Hello" %,% "World"
## [1] "Hello, World"

La base de R fournit %*%(multiplication matricielle), %/%(division entière), %in%(lhs est-il un composant des rhs?), %o%(Produit externe) et %x%(produit de kronecker). Il n'est pas clair si%% relève ou non de cette catégorie, mais cela représente modulo.

expm Le package R, expm, définit un opérateur de puissance matriciel %^%. Pour voir un exemple matrice de puissance en R .

opérateurs Le package des opérateurs R a défini un grand nombre de tels opérateurs tels que %!in%(pour non %in%). Voir http://cran.r-project.org/web/packages/operators/operators.pdf

Tuyaux

magrittr Dans le cas du %>%package magrittr R l'a défini comme décrit 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 de ce type. Voir la section Opérateurs de tuyaux supplémentaires du lien précédent qui traite %T>%, %<>%et %$%et http://cran.r-project.org/web/packages/magrittr/magrittr.pdf pour encore plus de détails.

dplyr Le package dplyr R utilisé pour définir un %.%opérateur similaire; cependant, il est obsolète et dplyr recommande désormais aux utilisateurs d'utiliser %>%quel dplyr importe depuis magrittr et met à la disposition de l'utilisateur de dplyr. Comme David Arenburg l'a mentionné dans les commentaires, cette question SO traite des différences entre elle et celle de magrittr %>%: Différences entre%.% (Dplyr) et%>% (magrittr)

pipeR Le package R, pipeR, définit un %>>%opérateur qui est similaire à%>% de magrittr et peut être utilisé comme alternative. Voir http://renkun.me/pipeR-tutorial/

Le package 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

postlogic Le package postlogic défini %if%et les %unless%opérateurs.

wrapr Le package R, wrapr, définit un tube de point %.>%qui est une version explicite de %>%en ce qu'il n'effectue pas d'insertion implicite d'arguments mais ne remplace que les utilisations explicites du 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

Pipe Bizarro . Ce n'est pas vraiment un tube, mais plutôt une syntaxe de base intelligente pour fonctionner de manière similaire aux tubes sans utiliser réellement de tubes. 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 point et terminons chaque composant du pipeline par une affectation à 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 package expm et exemple simplifié en haut. Ajout du package postlogic.

G. Grothendieck
la source
1
Je vois aussi:% <>%,% T>%,% $%, que font-ils? rpackages.ianhowson.com/cran/magrittr/man/pipe.html
pluke
À partir de R après le chargement de magrittr, obtenez de l'aide en utilisant:, ?"%<>%"etc.
G. Grothendieck
17

Ma compréhension après avoir lu le lien proposé par G.Grothendieck est que%>% est un opérateur qui utilise des fonctions de tuyaux. Cela facilite la lisibilité et la productivité car il est plus facile de suivre le flux de plusieurs fonctions à travers ces tuyaux que de revenir en arrière lorsque plusieurs fonctions sont imbriquées.

Francisco López-Sancho
la source
Les avantages que vous avez mentionnés sont illustrés par des exemples de code ici .
Christopher Stephan
9

%>%est similaire au tube sous Unix. Par exemple, dans

a <- combined_data_set %>% group_by(Outlet_Identifier) %>% tally()

la sortie de combined_data_setentrera dans group_byet sa sortie entrera dans tally, puis la sortie finale est affectée à a.

Cela vous donne un moyen pratique et facile d'utiliser des fonctions en série sans créer de variables et stocker des valeurs intermédiaires.

RAJAT BHATHEJA
la source
-1

Les packages R dplyr et sf importent l'opérateur%>% du package R magrittr.

L'aide est disponible à l'aide de la commande suivante:

?'%>%'

Bien sûr, le paquet doit être chargé avant en utilisant par exemple

library(sf)

La documentation de l'opérateur magrittr forward-pipe donne un bon exemple: lorsque les fonctions ne nécessitent qu'un seul argument, x%>% f équivaut à f (x)

HKE
la source
1
On dirait que cela est déjà bien expliqué dans stackoverflow.com/a/27129032/570918 .
merv