Что означает функция %>% в R?
Я видел использование %>%
(процент больше процента) функция в некоторых пакетах, таких как dplyr и rvest. Что это значит? Это способ написать блоки закрытия в R?
5 ответов:
%...% операторов
%>%
не имеет встроенного значения, но пользователь (или пакет) может свободно определять операторы формы%whatever%
в любом случае им нравится. Например, эта функция возвращает строку, состоящую из ее левого аргумента, за которым следуют запятая и пробел, а затем это правый аргумент."%,%" <- function(x, y) paste0(x, ", ", y) # test run "Hello" %,% "World" ## [1] "Hello, World"
база R обеспечивает
%*%
(матрица мультипликации),%/%
(целочисленное деление),%in%
(является ли lhs компонентом rhs?),%o%
(внешняя продукт) и%x%
(произведение Кронекера). Не ясно ли%%
попадает в эту категорию или нет, но она представляет собой по модулю.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.htmlmagittr также определил ряд других таких операторов. См. раздел Дополнительные трубные операторы предыдущей ссылки, которая обсуждает
%T>%
,%<>%
и%$%
и http://cran.r-project.org/web/packages/magrittr/magrittr.pdf для более подробной информации.dplyr пакет dplyr R, используемый для определения a
%.%
оператор, который похож; однако, он был осужден и dplyr теперь рекомендует пользователям использовать%>%
который dplyr импортирует из magrittr и делает доступным для пользователя dplyr. Как отметил Дэвид Аренбург в комментариях, этот вопрос обсуждается разница между ним и magrittr's%>%
:различия между %.% (dplyr) и %>% (magrittr)Пайпер пакет R, Пайпер, определяет a
%>>%
оператор, который похож на 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.htmlBizarro pipe. Это на самом деле не труба, а скорее какой-то умный базовый синтаксис, чтобы работать так же, как трубы, фактически не используя трубы. Это обсуждается в 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, а не eliding аргумент 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)