Was bedeutet%>% Funktion in R?


119

Ich habe die Verwendung von %>%(Prozent größer als Prozent) Funktion in einigen Paketen wie dplyr und rvest gesehen . Was heißt das? Ist es eine Möglichkeit, Abschlussblöcke in R zu schreiben?


10
oder schauen Sie sich?'%>%'
jbaums

6
Danke David! jbaums, dazu gibt es leider kein doc. ? '%>%' wiederholt "Keine Dokumentation für '%>%' in bestimmten Paketen und Bibliotheken"
alfakini

6
@alf. Sie müssen library(magrittr)oder library(dplyr)zuerst und dann laufen ?'%>%', obwohl mein Link mehr Informationen bietet
David Arenburg

1
Schauen Sie auch hier
David Arenburg

Antworten:


141

% ...% Operatoren

%>%hat keine eingebaute Bedeutung, aber der Benutzer (oder ein Paket) kann die Operatoren des Formulars %whatever%nach Belieben definieren . Diese Funktion gibt beispielsweise eine Zeichenfolge zurück, die aus dem linken Argument gefolgt von einem Komma und einem Leerzeichen und dem rechten Argument besteht.

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

# test run

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

Die Basis von R liefert %*%(Matrixmulitiplikation), %/%(ganzzahlige Division), %in%(ist lhs ein Bestandteil des rhs?), %o%(Außenprodukt) und %x%(Kronecker-Produkt). Es ist nicht klar, ob es %%in diese Kategorie fällt oder nicht, aber es repräsentiert Modulo.

expm Das R-Paket expm definiert einen Matrixleistungsoperator %^%. Ein Beispiel finden Sie unter Matrixleistung in R. .

Operatoren Das Operator-R-Paket hat eine große Anzahl solcher Operatoren definiert, z. B. %!in%(für nicht %in%). Siehe http://cran.r-project.org/web/packages/operators/operators.pdf

Rohre

magrittr Im Fall des %>%magrittr R-Pakets wurde es wie in der magrittr-Vignette beschrieben definiert. Siehe http://cran.r-project.org/web/packages/magrittr/vignettes/magrittr.html

magittr hat auch eine Reihe anderer solcher Operatoren definiert. Siehe das Zusatzrohr Operatoren Abschnitt des Standes der Verbindung , die diskutiert %T>%, %<>%und %$%und http://cran.r-project.org/web/packages/magrittr/magrittr.pdf für noch mehr Details.

dplyr Das Paket dplyr R, mit dem ein %.%ähnlicher Operator definiert wird. Es ist jedoch veraltet und dplyr empfiehlt nun Benutzern, das zu verwenden, %>%das dplyr aus magrittr importiert und dem dplyr-Benutzer zur Verfügung stellt. Wie David Arenburg in den Kommentaren erwähnt hat, diskutiert diese SO-Frage die Unterschiede zwischen ihr und den Magrittr %>%: Unterschiede zwischen%.% (Dplyr) und%>% (Magrittr)

pipeR Das R-Paket pipeR definiert einen %>>%Operator, der dem%>% von magrittr ähnlich ist und als Alternative dazu verwendet werden kann. Siehe http://renkun.me/pipeR-tutorial/

Das pipeR-Paket hat auch eine Reihe anderer solcher Operatoren definiert. Siehe: http://cran.r-project.org/web/packages/pipeR/pipeR.pdf

postlogic Das definierte postlogic-Paket %if%und die %unless%Operatoren.

wrapr Das R-Paket wrapr definiert eine Punktpipe, die eine %.>%explizite Version von ist %>%, da es keine implizite Einfügung von Argumenten durchführt, sondern nur die explizite Verwendung von Punkten auf der rechten Seite ersetzt. Dies kann als eine weitere Alternative zu betrachtet werden %>%. Siehe https://winvector.github.io/wrapr/articles/dot_pipe.html

Bizarro Pfeife . Dies ist nicht wirklich eine Pipe, sondern eine clevere Basissyntax, die ähnlich wie Pipes funktioniert, ohne tatsächlich Pipes zu verwenden. Es wird in http://www.win-vector.com/blog/2017/01/using-the-bizarro-pipe-to-debug-magrittr-pipelines-in-r/ besprochen. Die Idee ist, dass anstatt zu schreiben:

1:8 %>% sum %>% sqrt
## [1] 6

man schreibt folgendes. In diesem Fall verwenden wir explizit Punkt, anstatt das Punktargument zu entfernen, und beenden jede Komponente der Pipeline mit einer Zuweisung zu der Variablen, deren Name dot ( .) ist. Wir folgen dem mit einem Semikolon.

1:8 ->.; sum(.) ->.; sqrt(.)
## [1] 6

Update Hinzugefügte Informationen zum expm-Paket und vereinfachtes Beispiel oben. Postlogic-Paket hinzugefügt.


1
Ich sehe auch:% <>%,% T>%,% $%, was machen sie? rpackages.ianhowson.com/cran/magrittr/man/pipe.html
pluke

Von innerhalb von R nach dem Laden von Magrittr Hilfe bekommen mit: ?"%<>%"usw.
G. Grothendieck


9

%>%ist ähnlich wie Pipe in Unix. Zum Beispiel in

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

Die Ausgabe von combined_data_setwird eingegeben group_byund die Ausgabe wird eingegeben tally, dann wird die endgültige Ausgabe zugewiesena .

Auf diese Weise können Sie Funktionen auf einfache und einfache Weise in Reihe verwenden, ohne Variablen zu erstellen und Zwischenwerte zu speichern.


-1

Die R-Pakete dplyr und sf importieren den Operator%>% aus dem R-Paket magrittr.

Die Hilfe ist mit dem folgenden Befehl verfügbar:

?'%>%'

Natürlich muss das Paket vorher mit z

library(sf)

Die Dokumentation des Magrittr-Forward-Pipe-Operators gibt ein gutes Beispiel: Wenn Funktionen nur ein Argument erfordern, entspricht x%>% f f (x)


1
Dies scheint bereits in stackoverflow.com/a/27129032/570918 ausführlich erläutert worden zu sein .
Merv
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.