Wat betekent de functie %>% in R?

Ik heb het gebruik van de functie %>%(procent groter dan procent) gezien in sommige pakketten, zoals dplyren rvest. Wat betekent het? Is het een manier om afsluitblokken in R te schrijven?


Antwoord 1, autoriteit 100%

%…% operators

%>%heeft geen ingebouwde betekenis, maar het staat de gebruiker (of een pakket) vrij om operators van de vorm %whatever%op elke gewenste manier te definiëren. Deze functie retourneert bijvoorbeeld een tekenreeks die bestaat uit het linkerargument gevolgd door een komma en spatie en vervolgens het rechterargument.

"%,%" <- function(x, y) paste0(x, ", ", y)
# test run
"Hello" %,% "World"
## [1] "Hello, World"

De basis van R levert %*%(matrixmultiplicatie), %/%(geheel getal), %in%(is Is dit een onderdeel van de rhs?), %o%(buitenproduct) en %x%(kronecker-product). Het is niet duidelijk of %%in deze categorie valt of niet, maar het vertegenwoordigt modulo.

expmHet R-pakket, expm, definieert een matrixmachtsoperator %^%. Zie voor een voorbeeld Matrixvermogen in R.

operatorsHet operators R-pakket heeft een groot aantal van dergelijke operators gedefinieerd, zoals %!in%(voor niet %in%) . Zie http://cran.r-project.org/web/packages/ operators/operators.pdf

igraphDit pakket definieert %–% , %->% en %<-% om randen te selecteren.

lubridateDit pakket definieert %m+% en %m-% om maanden op te tellen en af te trekken en %–% om een interval te definiëren. igraph definieert ook %–% .

Pijpen

magrittrIn het geval van %>%heeft het magrittr R-pakket het gedefinieerd zoals besproken in het magrittr-vignet. Zie http://cran.r-project.org/web/ packages/magrittr/vignetten/magrittr.html

magittr heeft ook een aantal andere dergelijke operatoren gedefinieerd. Zie het gedeelte Extra leidingbeheerders van de vorige link waarin %T>%, %<>%en %$%en http://cran.r-project.org/web/packages/magrittr/ magrittr.pdfvoor nog meer details.

dplyrHet dplyr R-pakket dat wordt gebruikt om een %.%-operator te definiëren die vergelijkbaar is; het is echter verouderd en dplyr raadt gebruikers nu aan om %>%te gebruiken die dplyr importeert uit magrittr en beschikbaar stelt aan de dplyr-gebruiker. Zoals David Arenburg in de opmerkingen heeft vermeld, bespreekt deze SO-vraag de verschillen tussen de vraag en de %>%van magrittr: Verschillen tussen %.% (dplyr) en %>% (magrittr)

pipeRHet R-pakket, pipeR, definieert een %>>%-operator die vergelijkbaar is met de %>% van magrittr en kan worden gebruikt als alternatief voor het. Zie http://renkun.me/pipeR-tutorial/

Het pipeR-pakket heeft ook een aantal andere dergelijke operators gedefinieerd. Zie: http://cran.r-project.org/web/packages /pipeR/pipeR.pdf

postlogicHet postlogic-pakket definieerde de operatoren %if%en %unless%.

wrapprHet R-pakket, wrapr, definieert een dot-pipe %.>%die een expliciete versie is van %>%in die zin dat het geen impliciete toevoeging van argumenten doet, maar alleen het expliciete gebruik van punt aan de rechterkant vervangt. Dit kan worden beschouwd als een ander alternatief voor %>%. Zie https://winvector.github.io/wrapr/articles/dot_pipe.html

Bizarro pijp. Dit is niet echt een pijp, maar eerder een slimme basissyntaxis om op een manier te werken die vergelijkbaar is met pijpen zonder daadwerkelijk pijpen te gebruiken. Het wordt besproken in http://www.win-vector.com/blog/2017/01/using-the-bizarro-pipe-to-debug-magrittr-pipelines-in-r/Het idee is dat in plaats van te schrijven:

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

men schrijft het volgende. In dit geval gebruiken we expliciet punt in plaats van het puntargument weg te laten en eindigen we elk onderdeel van de pijplijn met een toewijzing aan de variabele waarvan de naam punt is (.) . We volgen dat met een puntkomma.

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

UpdateInformatie toegevoegd over expm-pakket en vereenvoudigd voorbeeld bovenaan. Postlogic pakket toegevoegd.

Update 2De ontwikkelversie van R heeft een |>-pipe gedefinieerd. In tegenstelling tot %>%van magrittr kan het alleen vervangen worden door het eerste argument van de rechterkant. Hoewel beperkt, werkt het via syntaxistransformatie, dus het heeft geen invloed op de prestaties.


Antwoord 2, autoriteit 14%

%>%is vergelijkbaar met pipe in Unix. Bijvoorbeeld in

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

de uitvoer van combined_data_setgaat naar group_byen de uitvoer gaat naar tally, waarna de uiteindelijke uitvoer wordt toegewezen aan a.

Dit geeft je een handige en gemakkelijke manier om functies in serie te gebruiken zonder variabelen te maken en tussenliggende waarden op te slaan.


Antwoord 3, autoriteit 14%

Mijn begrip na het lezen van de link aangeboden door G.Grothendieckis dat %>% een operator is die functies doorgeeft. Dit komt de leesbaarheid en productiviteit ten goede, omdat het gemakkelijker is om de stroom van meerdere functies door deze buizen te volgen dan achteruit te gaan wanneer meerdere functies zijn genest.


Antwoord 4

De R-pakketten dplyr en sf importeren de operator %>% uit het R-pakket magrittr.

Help is beschikbaar door het volgende commando te gebruiken:

?'%>%'

Natuurlijk moet het pakket eerst worden geladen door bijv.

library(sf)

De documentatie van de magrittr forward-pipe operator geeft een goed voorbeeld:
Als functies slechts één argument vereisen, is x %>% f gelijk aan f(x)


Antwoord 5

Ik weet er niet veel over, maar ik heb het in één casestudy gezien tijdens de studie van multivariate normale distributie in R in mijn college

Stel dat u een gegevensframe hebt in een variabele genaamd “DF_GATHER” en u wilt het in een ggplot pijpen, dan kunt u dat% & GT;%

gebruiken

bijvoorbeeld:

df_gather %>% ggplot(aes(x = Value, fill = Variable, color = Variable))+
geom_density(alpha = 0.3)+ggtitle('Distibution of X')

Other episodes