Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

%...% операторов

%>% не имеет встроенного значения, но пользователь (или пакет) может свободно определять операторы формы %whatever% от того, %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.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

Мое понимание после прочтения ссылки предложенной G.Grothendieck, состоит в том, что% > % - это оператор, который выполняет функции труб, чтобы улучшить удобочитаемость и производительность, так как легче следить за потоком нескольких функций через эти каналы, чем идти назад, когда несколько функций вложены.

Ответ 3

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

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

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

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

Ответ 4

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

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

?'%>%'

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

library(sf)

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

Ответ 5

Канал %>% пропускает выходные данные фрейма данных, полученные из функции непосредственно перед каналом, и вводит их в качестве первого аргумента функции сразу после канала.

For Example