it-swarm.com.de

Was bedeutet%>% Funktion in R?

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

63
alfakini

% ...% Operatoren

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

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

# test run

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

Die Basis von R enthält %*% (Matrix-Multiplikation), %/% (Ganzzahldivision), %in% (ist lhs eine Komponente von rhs?), %o% (äußeres Produkt) und %x% (Kronecker-Produkt). Es ist nicht klar, ob %% in diese Kategorie fällt oder nicht, aber Modulo darstellt.

expm Das R-Paket expm definiert einen Matrix-Energieoperator %^%. Für ein Beispiel siehe Matrix Power in R .

operator Das Paket des Operators R 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

Pfeifen

magrittr Im Fall von %>% hat das Paket magrittr R das in der magrittr-Vignette besprochene Paket definiert. Siehe http://cran.r-project.org/web/packages/magrittr/vignettes/magrittr.html

magittr hat auch eine Reihe anderer solcher Operatoren definiert. Weitere Informationen hierzu finden Sie im Abschnitt Zusätzliche Pipe-Operatoren des vorherigen Links, der %T>%, %<>% und %$% und http://cran.r-project.org/web/packages/magrittr/magrittr.pdf behandelt.

dplyr Das dplyr R-Paket, das zum Definieren eines %.%-Operators verwendet wird, der ähnlich ist. Es ist jedoch veraltet, und dplyr empfiehlt nun Benutzern, %>% zu verwenden, der dplyr von magrittr importiert und dem dplyr-Benutzer zur Verfügung stellt. Wie David Arenburg in den Kommentaren erwähnt hat, werden in dieser SO -Frage die Unterschiede zwischen ihm und dem %>% von Magrittr diskutiert: Unterschiede zwischen%.% (Dplyr) und%>% (magrittr)

pipeR Das R-Paket pipeR definiert einen %>>%-Operator, der magrittrs%>% ä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 postlogic-Paket definiert die Operatoren %if% und %unless%.

wrapr Das R-Paket wrapr definiert eine Dot-Pipe %.>%, die eine explizite Version von %>% ist, indem implizit keine Argumente eingefügt werden, sondern nur die explizite Verwendung von dot auf der rechten Seite ersetzt wird. Dies kann als eine weitere Alternative zu %>% betrachtet werden. Siehe https://winvector.github.io/wrapr/articles/dot_pipe.html

Bizarro Pipe. Dies ist nicht wirklich eine Pipe, sondern eher eine clevere Basissyntax, um auf ähnliche Weise wie Pipe zu arbeiten, ohne Pipe zu verwenden. Es wird diskutiert in http://www.win-vector.com/blog/2017/01/ using-the-bizarro-pipe-to-debug-magrittr-pipelines-in-r/ Die Idee ist die statt zu schreiben:

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

man schreibt folgendes. In diesem Fall verwenden wir explizit dot anstelle des dot-Arguments 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 Informationen zum expm-Paket und vereinfachtes Beispiel oben hinzugefügt. Postlogic-Paket hinzugefügt.

103
G. Grothendieck

Nach dem Lesen des Links von G.Grothendieck verstehe ich, dass%>% ein Operator ist, der über Pipes-Funktionen arbeitet, um die Lesbarkeit und Produktivität zu verbessern, da es einfacher ist, den Fluss mehrerer Funktionen durch diese Pipes zu verfolgen, als rückwärts zu gehen mehrere Funktionen sind verschachtelt.

%>% ähnelt der Pipe in Unix. Zum Beispiel in

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

die Ausgabe von combined_data_set geht in group_by und ihre Ausgabe in tally, dann wird die endgültige Ausgabe a zugewiesen.

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

5
RAJAT BHATHEJA

Die Pipe %>% übergibt die Datenrahmenausgabe, die sich aus der Funktion direkt vor der Pipe ergibt, und gibt sie als erstes Argument der Funktion direkt nach der Pipe ein.

For Example

0
Jordan

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

Die Hilfe kann mit dem folgenden Befehl aufgerufen werden:

?'%>%'

Natürlich muss das Paket zuvor geladen werden, indem z.B.

library(sf)

Die Dokumentation des Forward-Pipe-Operators magrittr bietet ein gutes Beispiel: Wenn für Funktionen nur ein Argument erforderlich ist, entspricht x%>% f f (x).

0
HKE