O que significa%>% significa em R?

Eu vi o uso da function %>% (percentual maior que%) em alguns pacotes como dplyr e rvest . O que isso significa? É uma maneira de escrever blocos de fechamento em R?

%%% operadores

%>% não tem significado embutido, mas o usuário (ou um pacote) é livre para definir operadores do formulário %whatever% que desejar. Por exemplo, esta function retornará uma string que consiste em seu argumento esquerdo seguido por uma vírgula e espaço e então é o argumento correto.

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

A base de R fornece %*% (multiplicação de matriz), %/% (divisão inteira), %in% (é lhs um componente dos rhs?), %o% (produto externo) e %x% (produto kronecker) . Não está claro se %% se enquadra nesta categoria ou não, mas isso representa o módulo.

expm O pacote R, expm, define um operador de matriz de energia %^% . Para um exemplo, veja Matrix power in R.

operadores O pacote R do operador definiu um grande número de operadores como %!in% (para não %in% ). Veja http://cran.r-project.org/web/packages/operators/operators.pdf

Tubos

magrittr No caso de %>% o pacote magrittr R definiu como discutido na vinheta magrittr. Veja http://cran.r-project.org/web/packages/magrittr/vignettes/magrittr.html

O magittr também definiu vários outros operadores desse tipo também. Veja a seção Additional Pipe Operators do link anterior que discute %T>% , %<>% e %$% e http://cran.r-project.org/web/packages/magrittr/magrittr.pdf para ainda mais detalhes.

dplyr O pacote dplyr R usado para definir um operador %.% que é semelhante; no entanto, ele foi preterido e dplyr agora recomenda que os usuários usem %>% que faz com que as importações sejam excluídas do magrittr e sejam disponibilizadas para o usuário dplyr. Como David Arenburg mencionou nos comentários, esta questão da SO discute as diferenças entre ela e %>% do magrittr: Diferenças entre%.% (Dplyr) e%>% (magrittr)

pipeR O pacote R, pipeR, define um operador %>>% que é semelhante ao%>% do magrittr e pode ser usado como uma alternativa para ele. Veja http://renkun.me/pipeR-tutorial/

O pacote pipeR também definiu vários outros operadores. Veja: http://cran.r-project.org/web/packages/pipeR/pipeR.pdf

wrapr O pacote R, wrapr, define um pipe de ponto %.>% que é uma versão explícita de %>% , pois não faz inserção implícita de argumentos, mas apenas substitui usos explícitos de ponto no lado direito. Isso pode ser considerado como outra alternativa para %>% . Veja https://winvector.github.io/wrapr/articles/dot_pipe.html

Tubo bizarro . Isso não é realmente um pipe, mas sim uma syntax base inteligente para funcionar de maneira semelhante aos pipes sem realmente usar pipes. É discutido em http://www.win-vector.com/blog/2017/01/using-the-bizarro-pipe-to-debug-magrittr-pipelines-in-r/ A idéia é que, em vez de escrever:

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

um escreve o seguinte. Nesse caso, usamos explicitamente o ponto em vez de eliminar o argumento de ponto e finalizar cada componente do pipeline com uma atribuição à variável cujo nome é ponto ( . ). Nós seguimos isso com um ponto e vírgula.

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

Atualizar informações adicionadas no pacote expm e exemplo simplificado na parte superior.

Meu entendimento depois de ler o link oferecido por G.Grothendieck é que%>% é um operador que canaliza funções para melhorar a legibilidade e a produtividade, pois é mais fácil acompanhar o stream de múltiplas funções por esses canais do que retroceder quando várias funções são aninhadas .

%>% é semelhante ao pipe no Unix, ele criou continuidade.

 a = combined_data_set %>% group_by(Outlet_Identifier) %>% tally() 

A saída de combined_data_set irá em group_by e o resultado de group_by irá para tall () e a saída final será atribuída a a .

Isso oferece uma maneira prática e fácil de usar funções em série sem criar variables ​​e armazenar valores intermediários.

O pipe %>% passa a saída do quadro de dados que resulta da function logo antes do canal para inseri-lo como o primeiro argumento da function logo após o canal.

Por exemplo

Os pacotes R dplyr e sf importam o operador%>% do pacote R magrittr.

A ajuda está disponível usando o seguinte comando:

 ?'%>%' 

Claro que o pacote deve ser carregado antes usando por exemplo

 library(sf) 

A documentação do operador magrittr forward-pipe dá um bom exemplo: Quando as funções requerem apenas um argumento, x%>% f é equivalente a f (x)