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?

Alfakini
quelle
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
1
Verwandte: Was bedeutet%>% in R
Joshua Ulrich

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.

G. Grothendieck
quelle
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
17

Nach dem Lesen des von G.Grothendieck angebotenen Links verstehe ich, dass%>% ein Operator ist, der Funktionen weiterleitet . Dies trägt zur Lesbarkeit und Produktivität bei, da es einfacher ist, den Fluss mehrerer Funktionen durch diese Pipes zu verfolgen, als rückwärts zu gehen, wenn mehrere Funktionen verschachtelt sind.

Francisco López-Sancho
quelle
Die Vorteile , die Sie erwähnt werden , mit Codebeispielen demonstriert hier .
Christopher Stephan
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.

RAJAT BHATHEJA
quelle
-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)

HKE
quelle
1
Dies scheint bereits in stackoverflow.com/a/27129032/570918 ausführlich erläutert worden zu sein .
Merv