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?
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
%>%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 .
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/
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
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.
À 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.
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)
?'%>%'
library(magrittr)
ou d'library(dplyr)
abord, puis exécutez?'%>%'
, bien que mon lien fournisse plus d'informationsRéponses:
%...% 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.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.pdfTuyaux
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.htmlmagittr 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.htmlPipe 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:
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.Mise à jour Ajout d'informations sur le package expm et exemple simplifié en haut. Ajout du package postlogic.
la source
?"%<>%"
etc.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.
la source
%>%
est similaire au tube sous Unix. Par exemple, dansla sortie de
combined_data_set
entrera dansgroup_by
et sa sortie entrera danstally
, 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.
la source
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
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)
la source