Что означает функция% ›% в R?

Я видел использование функции %>% (процент больше, чем процент) в некоторых пакетах, таких как dplyr < / strong> и rvest. Что это значит? Это способ написать закрывающие блоки в R?


person alfakini    schedule 25.11.2014    source источник
comment
или посмотрите ?'%>%'   -  person jbaums    schedule 25.11.2014
comment
Спасибо, Дэвид! jbaums, к сожалению, об этом нет документации. ? '% ›%' Retuns Нет документации для '%›%' в указанных пакетах и ​​библиотеках   -  person alfakini    schedule 25.11.2014
comment
@alf. вам нужно сначала library(magrittr) или library(dplyr), а затем запустить ?'%>%', хотя моя ссылка дает больше информации   -  person David Arenburg    schedule 25.11.2014
comment
Также посмотрите здесь   -  person David Arenburg    schedule 25.11.2014
comment
Полезный совет: получите пакет sos   -  person Carl Witthoft    schedule 25.11.2014
comment
По теме: Что означает% ›% в R   -  person Joshua Ulrich    schedule 16.09.2015
comment
@DavidArenburg, я пытаюсь понять% ›% в связи с ответом на вопрос, который я недавно задал (stackoverflow.com/questions/50492862/); добрался до этой страницы и попытался получить доступ к вашей ссылке (первый комментарий), но он вернул ужасное 404. Судя по другим комментариям, это звучит так, как будто это было полезно; ты можешь сделать репост?   -  person W Barker    schedule 25.05.2018
comment
@WBarker поищите его на здесь, стр. 9   -  person David Arenburg    schedule 25.05.2018


Ответы (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

igraph Этот пакет определяет% -%,% - ›% и%‹ -% для выбора краев.

lubridate Этот пакет определяет% m +% и% m-% для добавления и вычитания месяцев и% -% для определения интервала. igraph также определяет% -%.

Трубы

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. Как упомянул Дэвид Аренбург в комментариях, этот вопрос SO обсуждает различия между ним и %>% magrittr: Различия между %.% (dplyr) и% ›% (magrittr)

pipeR Пакет R, pipeR, определяет оператор %>>%, который похож на% ›% magrittr и может использоваться как альтернатива ему. См. http://renkun.me/pipeR-tutorial/.

В пакете pipeR также определен ряд других таких операторов. См .: http://cran.r-project.org/web/packages/pipeR/pipeR.pdf

postlogic В пакете postlogic определены операторы %if% и %unless%.

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

один пишет следующее. В этом случае мы явно используем точку вместо исключения аргумента точки и заканчиваем каждый компонент конвейера присвоением переменной с именем точка (.). После этого мы ставим точку с запятой.

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

Обновление. Добавлена ​​информация о пакете expm и упрощенный пример вверху. Добавлен постлогический пакет.

Обновление 2. В разрабатываемой версии R определен канал |>. В отличие от %>% magrittr, он может заменять только первый аргумент правой части. Хотя он и ограничен, он работает через преобразование синтаксиса, поэтому не влияет на производительность.

person G. Grothendieck    schedule 25.11.2014
comment
Я также вижу:% ‹›%,% T ›%,% $%, что они делают? rpackages.ianhowson.com/cran/magrittr/man/pipe.html - person pluke; 20.05.2016
comment
Изнутри R после загрузки magrittr получите помощь, используя: ?"%<>%" и т. Д. - person G. Grothendieck; 20.05.2016

%>% похож на pipe в Unix. Например, в

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

вывод combined_data_set перейдет в group_by, а его вывод перейдет в tally, тогда окончательный вывод будет назначен на a.

Это дает вам удобный и простой способ последовательного использования функций без создания переменных и хранения промежуточных значений.

person RAJAT BHATHEJA    schedule 21.03.2018

Я понял после прочтения ссылки, предложенной Г.Гротендиком заключается в том, что%>% - это оператор, который выполняет функции конвейера. Это способствует удобочитаемости и продуктивности, поскольку легче отслеживать поток нескольких функций через эти каналы, чем возвращаться назад, когда несколько функций вложены.

person Francisco López-Sancho    schedule 14.10.2016
comment
Упомянутые вами преимущества продемонстрированы на примерах кода, которые здесь. - person Christopher Stephan; 24.12.2017

Пакеты R dplyr и sf импортируют оператор%>% из пакета R magrittr.

Справка доступна с помощью следующей команды:

?'%>%'

Конечно, пакет должен быть загружен перед использованием, например,

library(sf)

Документация оператора прямой линии magrittr дает хороший пример: когда функциям требуется только один аргумент, x%>% f эквивалентно f (x)

person HKE    schedule 02.09.2018
comment
Похоже, это уже хорошо объяснено в stackoverflow.com/a/27129032/570918. - person merv; 21.03.2019

Я мало что знаю об этом, но я видел это в одном тематическом исследовании во время изучения многомерного нормального распределения в R в моем колледже.

предположим, что у вас есть фрейм данных в переменной с именем df_gather, и вы хотите передать его в ggplot, тогда вы можете использовать этот% ›%

EG:

df_gather %>% ggplot(aes(x = Value, fill = Variable, color = Variable))+
geom_density(alpha = 0.3)+ggtitle('Distibution of X')
person Shivam Panchbhai    schedule 04.05.2021