Eu vi o uso da função %>%(por cento maior que por cento) em alguns pacotes como dplyr e rvest . O que isso significa? É uma maneira de escrever blocos de fechamento em R?
Obrigado David! jbaums, infelizmente não há nenhum doc sobre isso. ? '%>%' retorna "Sem documentação para '%>%' em pacotes e bibliotecas especificados"
alfakini
6
@alf. você precisa library(magrittr)ou library(dplyr)primeiro e depois execute ?'%>%', embora meu link forneça mais informações
%>%não tem nenhum significado embutido, mas o usuário (ou um pacote) é livre para definir os operadores do formulário %whatever%da maneira que quiser. Por exemplo, esta função retornará uma string consistindo em seu argumento esquerdo seguido por uma vírgula e espaço e então seu argumento direito.
"%,%"<-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 do rhs?), %o%(Produto externo) e %x%(produto de kronecker). Não está claro se se %%enquadra nesta categoria ou não, mas representa o módulo.
expm O pacote R, expm, define um operador de potência de matriz %^%. Para um exemplo veja poder Matrix em R .
dplyr O pacote dplyr R usado para definir um %.%operador que é semelhante; entretanto, ele se tornou obsoleto e o dplyr agora recomenda que os usuários usem o %>%que dplyr importa do magrittr e o torna disponível para o usuário dplyr. Como David Arenburg mencionou nos comentários, esta questão do SO discute as diferenças entre ela e a de magrittr %>%: Diferenças entre%.% (Dplyr) e%>% (magrittr)
pipeR O pacote R, pipeR, define um %>>%operador semelhante ao%>% de magrittr e pode ser usado como uma alternativa a ele. Veja http://renkun.me/pipeR-tutorial/
postlogic O pacote postlogic definido %if%e %unless%operadores.
wrapr O pacote R, wrapr, define um dot pipe %.>%que é uma versão explícita %>%, pois não faz a inserção implícita de argumentos, mas apenas substitui os 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
um escreve o seguinte. Nesse caso, usamos explicitamente o ponto em vez de eliminar o argumento do ponto e finalizar cada componente do pipeline com uma atribuição à variável cujo nome é ponto ( .). Seguimos isso com um ponto e vírgula.
1:8->.; sum(.)->.; sqrt(.)## [1] 6
Atualização Adicionada informação sobre o pacote expm e exemplo simplificado no topo. Adicionado pacote postlogic.
De dentro de R, após carregar magrittr, obtenha ajuda usando:, ?"%<>%"etc.
G. Grothendieck
17
Meu entendimento depois de ler o link oferecido por G.Grothendieck é que%>% é um operador que canaliza funções. Isso ajuda na legibilidade e na produtividade, pois é mais fácil seguir o fluxo de várias funções por meio desses tubos do que voltar quando várias funções estão aninhadas.
?'%>%'
library(magrittr)
oulibrary(dplyr)
primeiro e depois execute?'%>%'
, embora meu link forneça mais informaçõesRespostas:
% ...% operadores
%>%
não tem nenhum significado embutido, mas o usuário (ou um pacote) é livre para definir os operadores do formulário%whatever%
da maneira que quiser. Por exemplo, esta função retornará uma string consistindo em seu argumento esquerdo seguido por uma vírgula e espaço e então seu argumento direito.A base de R fornece
%*%
(multiplicação de matriz),%/%
(divisão inteira),%in%
(lhs é um componente do rhs?),%o%
(Produto externo) e%x%
(produto de kronecker). Não está claro se se%%
enquadra nesta categoria ou não, mas representa o módulo.expm O pacote R, expm, define um operador de potência de matriz
%^%
. Para um exemplo veja poder Matrix em R .operadores O pacote de operadores R definiu um grande número de tais operadores, como
%!in%
(para não%in%
). Consulte http://cran.r-project.org/web/packages/operators/operators.pdfTubos
magrittr No caso do
%>%
pacote magrittr R o definiu conforme discutido na vinheta magrittr. Veja http://cran.r-project.org/web/packages/magrittr/vignettes/magrittr.htmlmagittr também definiu vários outros operadores desse tipo. Veja a secção Adicional Cachimbo Operadores da ligação antes 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; entretanto, ele se tornou obsoleto e o dplyr agora recomenda que os usuários usem o%>%
que dplyr importa do magrittr e o torna disponível para o usuário dplyr. Como David Arenburg mencionou nos comentários, esta questão do SO discute as diferenças entre ela e a de magrittr%>%
: Diferenças entre%.% (Dplyr) e%>% (magrittr)pipeR O pacote R, pipeR, define um
%>>%
operador semelhante ao%>% de magrittr e pode ser usado como uma alternativa a ele. Veja http://renkun.me/pipeR-tutorial/O pacote pipeR também definiu vários outros operadores desse tipo. Veja: http://cran.r-project.org/web/packages/pipeR/pipeR.pdf
postlogic O pacote postlogic definido
%if%
e%unless%
operadores.wrapr O pacote R, wrapr, define um dot pipe
%.>%
que é uma versão explícita%>%
, pois não faz a inserção implícita de argumentos, mas apenas substitui os 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.htmlTubo bizarro . Este não é realmente um pipe, mas uma sintaxe 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 ideia é que, em vez de escrever:
um escreve o seguinte. Nesse caso, usamos explicitamente o ponto em vez de eliminar o argumento do ponto e finalizar cada componente do pipeline com uma atribuição à variável cujo nome é ponto (
.
). Seguimos isso com um ponto e vírgula.Atualização Adicionada informação sobre o pacote expm e exemplo simplificado no topo. Adicionado pacote postlogic.
fonte
?"%<>%"
etc.Meu entendimento depois de ler o link oferecido por G.Grothendieck é que%>% é um operador que canaliza funções. Isso ajuda na legibilidade e na produtividade, pois é mais fácil seguir o fluxo de várias funções por meio desses tubos do que voltar quando várias funções estão aninhadas.
fonte
%>%
é semelhante ao pipe no Unix. Por exemplo, ema saída de
combined_data_set
irá paragroup_by
e sua saída irá paratally
, então a saída final é atribuída aa
.Isso fornece uma maneira prática e fácil de usar funções em série sem criar variáveis e armazenar valores intermediários.
fonte
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 de usar, por exemplo,
A documentação do operador magrittr forward-pipe dá um bom exemplo: Quando as funções requerem apenas um argumento, x%>% f é equivalente af (x)
fonte