Пайп %>% — цепочки операций
Главный приём современного R — пайп %>%, который превращает вложенные вызовы в читаемую цепочку.
Пайп (%>%) — оператор, передающий результат слева в первый аргумент функции справа.
Без пайпа сложный анализ превращается в матрёшку из вложенных вызовов, которую читать приходится изнутри наружу. Пайп переворачивает запись: операции идут слева направо, как шаги рецепта.
Почему это так важно? Реальный анализ — это почти всегда цепочка из 4–7 шагов: отфильтровать, добавить колонку, сгруппировать, посчитать сводку, отсортировать, взять верхушку. Записанная вложенными вызовами, такая цепочка нечитаема и легко ломается при правке. Пайп делает каждый шаг отдельной строкой, которую можно закомментировать, переставить или вставить новую посередине. Этот приём настолько удобен, что определяет весь современный стиль кода в R — без него tidyverse не существовал бы.
Проблема вложенности
Допустим, нужно отфильтровать, отсортировать и взять первые строки. Без пайпа:
head(arrange(filter(people, age > 18), desc(age)), 3)Читается изнутри: сначала filter, потом arrange, потом head — но в коде порядок обратный. Легко запутаться.
Тот же код с пайпом
Пайп %>% берёт левый результат и подставляет его первым аргументом справа:
library(dplyr)
result <- people %>%
filter(age > 18) %>%
arrange(desc(age)) %>%
head(3)Теперь читается сверху вниз, по-человечески: «возьми people, отфильтруй, отсортируй, возьми первые 3». Функции dplyr специально устроены так, что таблица — их первый аргумент, поэтому пайп ложится идеально.
Как читать пайп
Удобно мысленно проговаривать %>% как слово «затем»:
people %>% filter(...) %>% summarise(...) | | | данные затем фильтр затем сводка
Как работает под капотом
Запись x %>% f(y) R преобразует в обычный вызов f(x, y) — левый операнд просто вставляется первым аргументом. Никакой магии: пайп — это синтаксический сахар, эквивалентный вложенному вызову, но читаемый. В современных версиях R (4.1+) появился встроенный пайп |> с похожим поведением, но в tidyverse исторически используют %>% из пакета magrittr, у него больше возможностей.
Частые ошибки
- Забыть подключить dplyr/magrittr. Оператор
%>%приходит из пакета — безlibrary(dplyr)его нет. - Ставить пайп в конце разрыва не там. При переносе строки
%>%должен стоять в конце строки, а не в начале следующей. - Пытаться пайпить в функцию, где данные не первый аргумент. Тогда нужен placeholder-точка, но в dplyr это редкость.
Итог
- Пайп
%>%передаёт левый результат первым аргументом вправо. - Превращает вложенные вызовы в читаемую цепочку «затем».
x %>% f(y)эквивалентноf(x, y).- Приходит из пакета (magrittr/dplyr), требует
library.