Що означає%>% функція в R?


119

Я бачив використання функції %>%(на відсоток більше відсотка) у деяких пакетах, таких як dplyr та rvest . Що це означає? Це спосіб записати блоки закриття в R?


10
або дивіться?'%>%'
jbaums

6
Спасибі Давиде! jbaums, на жаль, документу з цього приводу немає. ? '%>%' retuns "Немає документації для '%>%' у вказаних пакетах та бібліотеках"
alfakini

6
@alf. вам потрібно library(magrittr)або library(dplyr)спочатку, а потім запустити ?'%>%', хоча моє посилання надає більше інформації
David Arenburg

1
Також подивіться тут
Девід Аренбург

Відповіді:


141

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

%>%не має вбудованого значення, але користувач (або пакет) може визначати оператори форми %whatever%будь-яким способом, який їм подобається. Наприклад, ця функція поверне рядок, що складається з її лівого аргументу, а потім кома та пробіл, а потім - правильний аргумент.

"%,%" <- function(x, y) paste0(x, ", ", y)

# test run

"Hello" %,% "World"
## [1] "Hello, World"

Основа R передбачає %*%(матричне множення), %/%(ціле ділення), %in%(є lhs компонентом rhs?), %o%(Зовнішній продукт) та %x%(продукт kronecker). Не ясно, %%потрапляє чи до цієї категорії чи ні, але це модуль.

expm Пакет R, expm, визначає оператор живлення матриці %^%. Для прикладу див Матриця потужності в R .

оператори Пакет операторів R визначив велику кількість таких операторів, як %!in%(for not %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 також визначив ряд інших таких операторів. Дивіться розділ Додатково Pipe Оператори попереднього ланки , які обговорюються %T>%, %<>%і %$%та http://cran.r-project.org/web/packages/magrittr/magrittr.pdf для ще більшого кількості деталей.

dplyr Пакет dplyr R, що використовується для визначення %.%схожого оператора; однак це застаріло і dplyr тепер рекомендує користувачам використовувати, %>%який dplyr імпортує з magrittr, і робить доступним для користувача dplyr. Як згадував Давид Аренбург у коментарях, це питання питання обговорює відмінності між ним та магтрітром %>%: відмінності між%.% (Dplyr) та%>% (magrittr)

pipeR Пакет R, pipeR, визначає %>>%оператора, який схожий на% mritrittr%>% і може використовуватися як альтернатива цьому. Дивіться http://renkun.me/pipeR-tutorial/

Пакет pipeR також визначив і ряд інших таких операторів. Дивіться: http://cran.r-project.org/web/packages/pipeR/pipeR.pdf

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

один пише наступне. У цьому випадку ми явно використовуємо крапку, а не зводимо аргумент точки і закінчуємо кожен компонент конвеєра присвоєнням змінній, ім'я якої - dot ( .). Ми слідуємо цим крапкою з комою.

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

Оновіть додану інформацію про пакет expm та спрощений приклад зверху. Додано постлогічний пакет.


1
Я також бачу:% <>%,% T>%,% $%, що вони роблять? rpackages.ianhowson.com/cran/magrittr/man/pipe.html
плав

Зсередини R після завантаження magrittr отримують допомогу, використовуючи: ?"%<>%"і т.
Д.

17

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


Переваги, які ви згадали, продемонстровані на прикладах коду тут .
Крістофер Стефан

9

%>%схожий на трубу в Unix. Наприклад, в

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

вихід combined_data_setувійде, group_byі його вихід перейде tally, тоді кінцевий вихід буде призначений a.

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


-1

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

Довідка доступна за допомогою наступної команди:

?'%>%'

Звичайно, пакет потрібно перед цим завантажувати, використовуючи, наприклад,

library(sf)

Документація оператора прямої труби магніттри дає хороший приклад: Коли для функцій потрібен лише один аргумент, x%>% f еквівалентно f (x)


1
Схоже, це вже добре пояснено в stackoverflow.com/a/27129032/570918 .
merv
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.