Я видел использование функции %>%
(процент больше, чем процент) в некоторых пакетах, таких как dplyr < / strong> и rvest. Что это значит? Это способ написать закрывающие блоки в R?
Что означает функция% ›% в 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
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; 20.05.2016
%>%
похож на 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)
Я мало что знаю об этом, но я видел это в одном тематическом исследовании во время изучения многомерного нормального распределения в 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 jbaums   schedule 25.11.2014library(magrittr)
илиlibrary(dplyr)
, а затем запустить?'%>%'
, хотя моя ссылка дает больше информации - person David Arenburg   schedule 25.11.2014sos
- person Carl Witthoft   schedule 25.11.2014