Cosa significa la funzione%>% in R?


119

Ho visto l'uso della funzione %>%(percentuale maggiore della percentuale) in alcuni pacchetti come dplyr e rvest . Cosa significa? È un modo per scrivere blocchi di chiusura in R?


10
o guarda?'%>%'
jbaums

6
Grazie David! jbaums, sfortunatamente non ci sono documenti su questo. ? '%>%' esegue nuovamente "Nessuna documentazione per '%>%' nei pacchetti e nelle librerie specificati"
alfakini

6
@alf. devi prima library(magrittr)o library(dplyr)prima e poi corri ?'%>%', anche se il mio link fornisce maggiori informazioni
David Arenburg

1
Inoltre, dai un'occhiata qui
David Arenburg

Risposte:


141

% ...% operatori

%>%non ha alcun significato incorporato ma l'utente (o un pacchetto) è libero di definire gli operatori del modulo %whatever%nel modo che preferisce. Ad esempio, questa funzione restituirà una stringa composta dal suo argomento a sinistra seguito da una virgola e uno spazio e quindi dall'argomento di destra.

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

# test run

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

La base di R fornisce %*%(moltiplicazione di matrici), %/%(divisione intera), %in%(lhs è un componente di rhs?), %o%(Prodotto esterno) e %x%(prodotto kronecker). Non è chiaro se %%rientri o meno in questa categoria ma rappresenta il modulo.

expm Il pacchetto R, expm, definisce un operatore di potenza a matrice %^%. Per un esempio vedere il potere Matrix in R .

operatori Il pacchetto R degli operatori ha definito un gran numero di tali operatori come %!in%(per non %in%). Vedi http://cran.r-project.org/web/packages/operators/operators.pdf

Pipes

magrittr Nel caso del %>%pacchetto magrittr R lo ha definito come discusso nella vignetta magrittr. Vedi http://cran.r-project.org/web/packages/magrittr/vignettes/magrittr.html

magittr ha anche definito una serie di altri operatori simili. Vedere la sezione Operatori di tubi aggiuntivi del collegamento precedente che discute %T>%, %<>%e %$%e http://cran.r-project.org/web/packages/magrittr/magrittr.pdf per ulteriori dettagli.

dplyr Il pacchetto dplyr R utilizzato per definire un %.%operatore simile; tuttavia, è stato deprecato e dplyr ora consiglia agli utenti di utilizzare %>%quale dplyr importa da magrittr e rende disponibile all'utente dplyr. Come ha menzionato David Arenburg nei commenti, questa domanda SO discute le differenze tra esso e magrittr %>%: differenze tra%.% (Dplyr) e%>% (magrittr)

pipeR Il pacchetto R, pipeR, definisce un %>>%operatore che è simile a%>% di magrittr e può essere usato come alternativa ad esso. Vedi http://renkun.me/pipeR-tutorial/

Il pacchetto pipeR ha anche definito una serie di altri operatori simili. Vedi: http://cran.r-project.org/web/packages/pipeR/pipeR.pdf

postlogic Il pacchetto postlogic definito %if%e gli %unless%operatori.

wrapr Il pacchetto R, wrapr, definisce un dot pipe %.>%che è una versione esplicita di %>%in quanto non esegue l'inserimento implicito di argomenti ma sostituisce solo gli usi espliciti di punto sul lato destro. Questo può essere considerato come un'altra alternativa a %>%. Vedi https://winvector.github.io/wrapr/articles/dot_pipe.html

Pipa bizarro . Questa non è realmente una pipe, ma piuttosto una sintassi di base intelligente per funzionare in modo simile alle pipe senza effettivamente usare le pipe. È discusso in http://www.win-vector.com/blog/2017/01/using-the-bizarro-pipe-to-debug-magrittr-pipelines-in-r/ L'idea è che invece di scrivere:

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

si scrive quanto segue. In questo caso usiamo esplicitamente punto invece di elidere l'argomento punto e terminiamo ogni componente della pipeline con un assegnamento alla variabile il cui nome è punto ( .). Lo seguiamo con un punto e virgola.

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

Aggiorna Aggiunte informazioni sul pacchetto expm ed esempio semplificato in alto. Aggiunto pacchetto postlogic.


1
Vedo anche:% <>%,% T>%,% $%, cosa fanno? rpackages.ianhowson.com/cran/magrittr/man/pipe.html
pluke

Dall'interno di R dopo aver caricato magrittr ottenere aiuto utilizzando:, ?"%<>%"ecc.
G. Grothendieck


9

%>%è simile a pipe in Unix. Ad esempio, in

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

l'output di combined_data_setentrerà in group_bye il suo output andrà in tally, quindi verrà assegnato l'output finale a.

Ciò fornisce un modo pratico e semplice per utilizzare le funzioni in serie senza creare variabili e memorizzare valori intermedi.


-1

I pacchetti R dplyr e sf importano l'operatore%>% dal pacchetto R magrittr.

La guida è disponibile utilizzando il seguente comando:

?'%>%'

Ovviamente il pacchetto deve essere caricato prima utilizzando ad es

library(sf)

La documentazione dell'operatore forward-pipe magrittr fornisce un buon esempio: quando le funzioni richiedono un solo argomento, x%>% f è equivalente a f (x)


1
Sembra che questo sia già ben spiegato in stackoverflow.com/a/27129032/570918 .
merv
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.