2014-11-25 25 views
35

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

Grazie

+2

Leggere [questo] (http://rpackages.ianhowson.com/cran/magrittr/man/pipe.html). È un operatore di piping nel pacchetto magrittr –

+6

o guarda '? '%>%'' – jbaums

+2

Grazie David! jbaums, sfortunatamente non ci sono documenti su questo. ? '%>%' retuns "Nessuna documentazione per '%>%' in pacchetti e librerie specificate" – alfakini

risposta

67

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

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

# test run 

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

La base di R fornisce %*% (matrice mulitiplication), %/% (divisione intera), %in% (ss è un componente del sd?), %o% (prodotto esterno) e %x% (prodotto Kronecker). Non è chiaro se %% rientra in questa categoria o meno ma rappresenta modulo.

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

magittr ha anche definito un numero di altri operatori di questo tipo. Vedere la sezione Additional Pipe Operators del link precedente che tratta di %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 %>% che dplyr importa da magrittr e rende disponibile all'utente dplyr. Come David Arenburg ha evidenziato nel commentare questa domanda SO discute le differenze tra questo e magrittr di %>%: Differences between %.% (dplyr) and %>% (magrittr)

Piper Il pacchetto R, Piper, definisce un operatore %>>% che è simile a% di magrittr>%. Vedi http://renkun.me/pipeR-tutorial/

Anche il pacchetto pipeR ha definito un numero di altri operatori di questo tipo. Vedi: http://cran.r-project.org/web/packages/pipeR/pipeR.pdf

wrapr Il pacchetto R, wrapr, definisce un condotto dot %.>% che è una versione esplicita di %>% in quanto non fa inserimento implicito di argomenti ma sostituisce soltanto usi espliciti del punto sul lato destro . Vedere https://winvector.github.io/wrapr/articles/dot_pipe.html

EXPM Il pacchetto R, EXPM, definisce una matrice operatore potenza %^%. Per un esempio vedere Matrix power in R.

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

Aggiornamento Informazioni aggiunte su pacchetto expm e esempio semplificato in alto.

+0

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

+0

Da R dopo aver caricato magrittr ottieni aiuto usando: '?"% <>% "', ecc. –

9

La mia comprensione dopo la lettura di link offered by G.Grothendieck è che%>% è un operatore che esegue il pipe per migliorare la leggibilità e la produttività poiché è più semplice seguire il flusso di più funzioni attraverso questi tubi che andare indietro quando sono nidificate più funzioni.

+0

I vantaggi che hai citato sono dimostrati con esempi di codice [qui] (http://r4ds.had.co.nz/pipes.html). –