Что означает функция %>% в R?
5 ответов
%...% операторы
%>%
не имеет встроенного значения, но пользователь (или пакет) может свободно определять операторы формы %whatever%
в любом случае им нравится. Например, эта функция возвращает строку, состоящую из левого аргумента, за которым следуют запятая и пробел, а затем правый аргумент.
"%,%" <- function(x, y) paste0(x, ", ", y)
# test run
"Hello" %,% "World"
## [1] "Hello, World"
база R обеспечивает %*%
(матрица mulitiplication), %/%
(целочисленное деление), %in%
(является ли lhs компонентом rhs?), %o%
(внешняя товар) и %x%
(продукт kronecker). Не ясно, будет ли %%
попадает в эту категорию или нет, но она представляет собой по модулю.
expm пакет R, expm, определяет матричный оператор питания %^%
. Пример см. В разделе мощность матрицы в R .
операторы пакет операторов R определил большое количество таких операторов, как %!in%
(не %in%
). Видеть http://cran.r-project.org/web/packages/operators/operators.pdf
труб
magrittr в случае %>%
пакет magrittr R определил его, как описано в виньетке magrittr. См.http://cran.r-project.org/web/packages/magrittr/vignettes/magrittr.html
magittr также определил ряд других таких операторов. См. раздел Дополнительные операторы труб предыдущей ссылки, который обсуждает %T>%
, %<>%
и %$%
и http://cran.r-project.org/web/packages/magrittr/magrittr.pdf для более подробная информация.
dplyr пакет dplyr R, используемый для определения %.%
оператор, который похож; однако он устарел, и dplyr теперь рекомендует пользователям использовать %>%
который dplyr импортирует из magrittr и делает доступным для пользователя dplyr. Как отметил Дэвид Аренбург в комментариях, этот вопрос обсуждается различия между ним и magrittr по %>%
: различия между %.% (dplyr) и %>% (magrittr)
Пайпер пакет R, pipeR, определяет %>>%
оператор, который похож на %>% magrittr и может использоваться в качестве альтернативы ему. См.http://renkun.me/pipeR-tutorial/
пакет pipeR также определил ряд других таких операторов. Видеть: http://cran.r-project.org/web/packages/pipeR/pipeR.pdf
wrapr пакет R, wrapr, определяет точечный канал %.>%
это явная версия %>%
в том, что он не делает неявную вставку аргументов, а только заменяет явное использование точки справа. Это можно рассматривать как еще одну альтернативу %>%
. Видеть https://winvector.github.io/wrapr/articles/dot_pipe.html
Бизарро трубы. Это на самом деле не труба, а скорее какой-то умный базовый синтаксис, чтобы работать аналогично трубам без фактического использования труб. Это обсуждается в http://www.win-vector.com/blog/2017/01/using-the-bizarro-pipe-to-debug-magrittr-pipelines-in-r/ идея в том, что вместо того, чтобы писать:
1:8 %>% sum %>% sqrt
## [1] 6
один пишет следующее. В этом случае мы явно используйте dot вместо удаления аргумента dot и завершите каждый компонент конвейера назначением переменной с именем dot (.
) . Мы следуем за этим точкой с запятой.
1:8 ->.; sum(.) ->.; sqrt(.)
## [1] 6
обновление добавлена информация о пакете expm и упрощенном примере вверху.
мое понимание после прочтения ссылка, предлагаемая G. Grothendieck это % > % - оператор, который выполняет функции труб для улучшения читаемости и производительности, поскольку легче следить за потоком нескольких функций через эти трубы, чем идти назад, когда несколько функций вложены.
%>%
похож на pipe в Unix. Например, в
a <- combined_data_set %>% group_by(Outlet_Identifier) %>% tally()
выход combined_data_set
поедет в group_by
и его выход будет идти в tally
, затем конечный результат присваивается a
.
это дает Вам удобный и простой способ использовать функции последовательно без создания переменных и хранения промежуточных значений.
трубы %>%
передает вывод фрейма данных, который является результатом функции прямо перед каналом, чтобы ввести его в качестве первого аргумента функции сразу после канала.
пакеты R dplyr и sf импортируют оператор %>% из пакета R magrittr.
справку можно с помощью следующей команды:
?'%>%'
конечно, пакет должен быть загружен перед использованием, например,
library(sf)
документация оператора прямой трубы magrittr дает хороший пример: Когда функции требуют только одного аргумента, x %>% f эквивалентно f (x)