¿Qué significa la función%>% en R?


119

He visto el uso de la función %>%(porcentaje mayor que porcentaje) en algunos paquetes como dplyr y rvest . Qué significa eso? ¿Es una forma de escribir bloques de cierre en R?


10
o mira?'%>%'
jbaums

6
¡Gracias David! jbaums, desafortunadamente no hay ningún documento sobre esto. ? '%>%' devuelve "No hay documentación para '%>%' en paquetes y bibliotecas especificados"
alfakini

6
@alf. necesita library(magrittr)o library(dplyr)primero y luego ejecutar ?'%>%', aunque mi enlace proporciona más información
David Arenburg

1
Además, eche un vistazo aquí
David Arenburg

Respuestas:


141

% ...% operadores

%>%no tiene un significado incorporado, pero el usuario (o un paquete) es libre de definir los operadores del formulario de la forma que %whatever%desee. Por ejemplo, esta función devolverá una cadena que consta de su argumento izquierdo seguido de una coma y un espacio y luego su argumento derecho.

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

# test run

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

La base de R proporciona %*%(multiplicación de matriz), %/%(división de números enteros), %in%(¿es lhs un componente del rhs?), %o%(Producto externo) y %x%(producto de kronecker). No está claro si %%cae en esta categoría o no, pero representa módulo.

expm El paquete R, expm, define un operador de potencia matricial %^%. Véase un ejemplo en el poder de la matriz en I .

operadores El paquete R de operadores ha definido un gran número de operadores tales como %!in%(for not %in%). Ver http://cran.r-project.org/web/packages/operators/operators.pdf

Tubería

magrittr En el caso del %>%paquete magrittr R lo ha definido como se discutió en la viñeta magrittr. Ver http://cran.r-project.org/web/packages/magrittr/vignettes/magrittr.html

magittr también ha definido una serie de otros operadores similares. Ver la sección adicional Operadores Pipe del enlace anterior, que analiza %T>%, %<>%y %$%y http://cran.r-project.org/web/packages/magrittr/magrittr.pdf incluso para más detalles.

dplyr El paquete dplyr R utilizado para definir un %.%operador que es similar; sin embargo, ha quedado obsoleto y ahora dplyr recomienda que los usuarios utilicen el %>%que dplyr importa de magrittr y lo pone a disposición del usuario de dplyr. Como ha mencionado David Arenburg en los comentarios, esta pregunta SO discute las diferencias entre ella y la de magrittr %>%: Diferencias entre%.% (Dplyr) y%>% (magrittr)

pipeR El paquete R, pipeR, define un %>>%operador que es similar al%>% de magrittr y se puede usar como una alternativa. Ver http://renkun.me/pipeR-tutorial/

El paquete pipeR también ha definido otros operadores similares. Ver: http://cran.r-project.org/web/packages/pipeR/pipeR.pdf

postlogic El paquete postlogic definido %if%y %unless%operadores.

wrapr El paquete R, wrapr, define un dot pipe %.>%que es una versión explícita de %>%en el sentido de que no hace una inserción implícita de argumentos, sino que solo sustituye los usos explícitos de dot en el lado derecho. Esto puede considerarse como otra alternativa a %>%. Ver https://winvector.github.io/wrapr/articles/dot_pipe.html

Pipa bizarro . Esto no es realmente una tubería, sino más bien una sintaxis básica inteligente para trabajar de una manera similar a las tuberías sin usar realmente las tuberías. Se discute en http://www.win-vector.com/blog/2017/01/using-the-bizarro-pipe-to-debug-magrittr-pipelines-in-r/ La idea es que en lugar de escribir:

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

uno escribe lo siguiente. En este caso usamos explícitamente punto en lugar de elidir el argumento de punto y terminamos cada componente de la canalización con una asignación a la variable cuyo nombre es punto ( .). Seguimos eso con un punto y coma.

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

Actualización Información agregada sobre el paquete expm y ejemplo simplificado en la parte superior. Paquete postlogic agregado.


1
También veo:% <>%,% T>%,% $%, ¿qué hacen? rpackages.ianhowson.com/cran/magrittr/man/pipe.html
pluke

Desde dentro de R después de cargar magrittr, obtenga ayuda para usar:, ?"%<>%"etc.
G. Grothendieck


9

%>%es similar a pipe en Unix. Por ejemplo, en

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

la salida de combined_data_setentrará group_byy su salida entrará tally, luego se asignará la salida final a a.

Esto le brinda una forma práctica y fácil de usar funciones en serie sin crear variables ni almacenar valores intermedios.


-1

Los paquetes R dplyr y sf importan el operador%>% del paquete R magrittr.

Hay ayuda disponible mediante el siguiente comando:

?'%>%'

Por supuesto, el paquete debe cargarse antes utilizando, por ejemplo,

library(sf)

La documentación del operador magrittr forward-pipe da un buen ejemplo: cuando las funciones requieren solo un argumento, x%>% f es equivalente af (x)


1
Parece que esto ya está bien explicado en stackoverflow.com/a/27129032/570918 .
merv
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.