SlideShare a Scribd company logo
1 of 12
Download to read offline
Как не использовать циклы
в языке R
Пакет purrr
Алексей Селезнёв
Сильные стороны пакета purrr
• Функции purrr хорошо сочетаются с конвейерами magrittr
• Функции purrr являются типоустойчивыми, и возвращают результат в ожидаемом формате, в
базовом R это реализовано только в функции vapply().
• Функции purrr поддерживают сокращённый синтаксис за счёт формул.
• Функции purrr могут итерироваться одновременно по любому количеству объектов
считывая данные для аргументов функций из фрейма.
• Пакет purrr позволяет по очереди применить набор разных функций к объектам.
• purrr имеет набор функций для обработки ошибок, полученных в результате итерирования.
• …
Семейства функций в purrr
• map_* - итерируются по объекту подобно функциям семейства apply*
• pmap_* - позволяет итерировать по любому количеству объектов, принимая аргументы
применяемой функции в виде таблицы или списка
• invoke_map – позволяет применять различные функции к объекту
• walk* - выполняют действия не возвращая результат, например сохраняют файлы
• keep и discord – функции фильтрующие результат
• reduce и accumulate – функции которые применяют по очереди заданную функцию к парам
объектов
• possibly, safely, quietly - функции обработки ошибок
Семейство map() - функции
• map() – аналог lapply(), возвращает список
• map_lgl() – возвращает логический вектор
• map_chr() – возвращает текстовый вектор
• map_int() – возвpащает целочисленный вектор
• map_dbl() – возвращает вектор чисел с плавающей запятой
• map_df(), map_dfr(), map_dfc() – возвращают таблицу
Семейство map() - аргументы
• .x – объект, элементы которого необходимо перебрать
• .f– функция, которую будем применять
• … - аргументы функции.f
• .id – позволяет добавить столбец с идентификатором элемента входящего объекта
(доступно только в map_dfr*())
Итерирование одновременно по нескольким
объектам
• map2_*() – итерирование по двум объектам
• pmap_*() – итерирование более чем по двум объектам
Синтаксис формул в purrr
Знак тильды (~) заменяет function(.x)
Обращение к аргументам анонимной функции:
• Если аргумент один – точка
• Если два аргумента .x и .y
• Если более двух аргументов ..1, ..2, ..3 и т.д.
Функции walk(), walk2() и pwalk()
• Сохранение данных в файл
• Сохранение графиков в файл
• Отправка сообщений
• Любые другие действия, в которых вы не ожидаете от функции исходящих данных
Функции keep() и discord()
Позволяют фильтровать полученные результаты по заданному
условию
Функции invoke_*()
Позволяют применять несколько функций к объектам
Функции reduce() и accumulate()
• reduce() – применяет функцию с двумя основными входными переменными и
повторно применяет её к списку до тех пор, пока не останется хотя бы один
элемент.
• accumulate() – аналогична reduce(), но удерживает все промежуточные
результаты.
Определения из книги «Язык R в задачах науки о данных»
СПАСИБО ЗА ВНИМАНИЕ

More Related Content

What's hot

Лекция 6. Фибоначчиевы кучи (Fibonacci heaps)
Лекция 6. Фибоначчиевы кучи (Fibonacci heaps)Лекция 6. Фибоначчиевы кучи (Fibonacci heaps)
Лекция 6. Фибоначчиевы кучи (Fibonacci heaps)Mikhail Kurnosov
 
Tarantool: как обрабатывать 
1,5 млрд запросов в сутки?
Tarantool: как обрабатывать 
1,5 млрд запросов в сутки?Tarantool: как обрабатывать 
1,5 млрд запросов в сутки?
Tarantool: как обрабатывать 
1,5 млрд запросов в сутки?tfmailru
 
Лекция 7: Бинарные кучи (пирамиды)
Лекция 7: Бинарные кучи (пирамиды)Лекция 7: Бинарные кучи (пирамиды)
Лекция 7: Бинарные кучи (пирамиды)Mikhail Kurnosov
 
Python AST / Николай Карелин / VPI Development Center [Python Meetup 27.03.15]
Python AST / Николай Карелин / VPI Development Center [Python Meetup 27.03.15]Python AST / Николай Карелин / VPI Development Center [Python Meetup 27.03.15]
Python AST / Николай Карелин / VPI Development Center [Python Meetup 27.03.15]Python Meetup
 
14 - Hadoop. Фреймворк Spark
14 - Hadoop. Фреймворк Spark14 - Hadoop. Фреймворк Spark
14 - Hadoop. Фреймворк SparkRoman Brovko
 
Отказоустойчивая обработка 10M OAuth токенов на Tarantool / Владимир Перепели...
Отказоустойчивая обработка 10M OAuth токенов на Tarantool / Владимир Перепели...Отказоустойчивая обработка 10M OAuth токенов на Tarantool / Владимир Перепели...
Отказоустойчивая обработка 10M OAuth токенов на Tarantool / Владимир Перепели...Ontico
 
12 вариантов использования Redis — в Tarantool (Александр Календарев, Констан...
12 вариантов использования Redis — в Tarantool (Александр Календарев, Констан...12 вариантов использования Redis — в Tarantool (Александр Календарев, Констан...
12 вариантов использования Redis — в Tarantool (Александр Календарев, Констан...Ontico
 
Красота и изящность стандартной библиотеки Python
Красота и изящность стандартной библиотеки PythonКрасота и изящность стандартной библиотеки Python
Красота и изящность стандартной библиотеки PythonPython Meetup
 
Why Every Language Needs Its Underscore
Why Every Language Needs Its UnderscoreWhy Every Language Needs Its Underscore
Why Every Language Needs Its UnderscoreAlexander Schepanovski
 
ITMO RecSys course. Autumn 2014. Lecture 3
ITMO RecSys course. Autumn 2014. Lecture 3ITMO RecSys course. Autumn 2014. Lecture 3
ITMO RecSys course. Autumn 2014. Lecture 3Andrey Danilchenko
 
Олег Алистратов — Сортировка списков в Perl и Python
Олег Алистратов — Сортировка списков в Perl и PythonОлег Алистратов — Сортировка списков в Perl и Python
Олег Алистратов — Сортировка списков в Perl и PythonYandex
 
Функциональное программирование на F#
Функциональное программирование на F#Функциональное программирование на F#
Функциональное программирование на F#akrakovetsky
 
Паттерны и примеры структур данных в NoSQL на примере Tarantool
Паттерны и примеры структур данных в NoSQL на примере TarantoolПаттерны и примеры структур данных в NoSQL на примере Tarantool
Паттерны и примеры структур данных в NoSQL на примере TarantoolAlexandre Kalendarev
 
Python. Объектно-ориентированное программирование
Python. Объектно-ориентированное программирование Python. Объектно-ориентированное программирование
Python. Объектно-ориентированное программирование Theoretical mechanics department
 
Использование Tarantool для хранения чатов и лент друзей (Константин Осипов)
Использование Tarantool для хранения чатов и лент друзей (Константин Осипов)Использование Tarantool для хранения чатов и лент друзей (Константин Осипов)
Использование Tarantool для хранения чатов и лент друзей (Константин Осипов)Ontico
 
Доклад Антона Поварова на Tarantool Meetup. "Tarantool в Badoo: хранение исто...
Доклад Антона Поварова на Tarantool Meetup. "Tarantool в Badoo: хранение исто...Доклад Антона Поварова на Tarantool Meetup. "Tarantool в Badoo: хранение исто...
Доклад Антона Поварова на Tarantool Meetup. "Tarantool в Badoo: хранение исто...Badoo Development
 
Александр Щепановский «Почему каждому языку нужен свой _»
Александр Щепановский «Почему каждому языку нужен свой _»Александр Щепановский «Почему каждому языку нужен свой _»
Александр Щепановский «Почему каждому языку нужен свой _»DevDay
 

What's hot (20)

Лекция 6. Фибоначчиевы кучи (Fibonacci heaps)
Лекция 6. Фибоначчиевы кучи (Fibonacci heaps)Лекция 6. Фибоначчиевы кучи (Fibonacci heaps)
Лекция 6. Фибоначчиевы кучи (Fibonacci heaps)
 
Tarantool: как обрабатывать 
1,5 млрд запросов в сутки?
Tarantool: как обрабатывать 
1,5 млрд запросов в сутки?Tarantool: как обрабатывать 
1,5 млрд запросов в сутки?
Tarantool: как обрабатывать 
1,5 млрд запросов в сутки?
 
Лекция 7: Бинарные кучи (пирамиды)
Лекция 7: Бинарные кучи (пирамиды)Лекция 7: Бинарные кучи (пирамиды)
Лекция 7: Бинарные кучи (пирамиды)
 
Python AST / Николай Карелин / VPI Development Center [Python Meetup 27.03.15]
Python AST / Николай Карелин / VPI Development Center [Python Meetup 27.03.15]Python AST / Николай Карелин / VPI Development Center [Python Meetup 27.03.15]
Python AST / Николай Карелин / VPI Development Center [Python Meetup 27.03.15]
 
14 - Hadoop. Фреймворк Spark
14 - Hadoop. Фреймворк Spark14 - Hadoop. Фреймворк Spark
14 - Hadoop. Фреймворк Spark
 
Отказоустойчивая обработка 10M OAuth токенов на Tarantool / Владимир Перепели...
Отказоустойчивая обработка 10M OAuth токенов на Tarantool / Владимир Перепели...Отказоустойчивая обработка 10M OAuth токенов на Tarantool / Владимир Перепели...
Отказоустойчивая обработка 10M OAuth токенов на Tarantool / Владимир Перепели...
 
12 вариантов использования Redis — в Tarantool (Александр Календарев, Констан...
12 вариантов использования Redis — в Tarantool (Александр Календарев, Констан...12 вариантов использования Redis — в Tarantool (Александр Календарев, Констан...
12 вариантов использования Redis — в Tarantool (Александр Календарев, Констан...
 
09 - Hadoop. Pig
09 - Hadoop. Pig09 - Hadoop. Pig
09 - Hadoop. Pig
 
Красота и изящность стандартной библиотеки Python
Красота и изящность стандартной библиотеки PythonКрасота и изящность стандартной библиотеки Python
Красота и изящность стандартной библиотеки Python
 
Why Every Language Needs Its Underscore
Why Every Language Needs Its UnderscoreWhy Every Language Needs Its Underscore
Why Every Language Needs Its Underscore
 
ITMO RecSys course. Autumn 2014. Lecture 3
ITMO RecSys course. Autumn 2014. Lecture 3ITMO RecSys course. Autumn 2014. Lecture 3
ITMO RecSys course. Autumn 2014. Lecture 3
 
Олег Алистратов — Сортировка списков в Perl и Python
Олег Алистратов — Сортировка списков в Perl и PythonОлег Алистратов — Сортировка списков в Perl и Python
Олег Алистратов — Сортировка списков в Perl и Python
 
PHP7 - что ожидать?
PHP7 - что ожидать?PHP7 - что ожидать?
PHP7 - что ожидать?
 
Функциональное программирование на F#
Функциональное программирование на F#Функциональное программирование на F#
Функциональное программирование на F#
 
Lisp8
Lisp8Lisp8
Lisp8
 
Паттерны и примеры структур данных в NoSQL на примере Tarantool
Паттерны и примеры структур данных в NoSQL на примере TarantoolПаттерны и примеры структур данных в NoSQL на примере Tarantool
Паттерны и примеры структур данных в NoSQL на примере Tarantool
 
Python. Объектно-ориентированное программирование
Python. Объектно-ориентированное программирование Python. Объектно-ориентированное программирование
Python. Объектно-ориентированное программирование
 
Использование Tarantool для хранения чатов и лент друзей (Константин Осипов)
Использование Tarantool для хранения чатов и лент друзей (Константин Осипов)Использование Tarantool для хранения чатов и лент друзей (Константин Осипов)
Использование Tarantool для хранения чатов и лент друзей (Константин Осипов)
 
Доклад Антона Поварова на Tarantool Meetup. "Tarantool в Badoo: хранение исто...
Доклад Антона Поварова на Tarantool Meetup. "Tarantool в Badoo: хранение исто...Доклад Антона Поварова на Tarantool Meetup. "Tarantool в Badoo: хранение исто...
Доклад Антона Поварова на Tarantool Meetup. "Tarantool в Badoo: хранение исто...
 
Александр Щепановский «Почему каждому языку нужен свой _»
Александр Щепановский «Почему каждому языку нужен свой _»Александр Щепановский «Почему каждому языку нужен свой _»
Александр Щепановский «Почему каждому языку нужен свой _»
 

Similar to Пакет purrr

Ecma script 6 in action
Ecma script 6 in actionEcma script 6 in action
Ecma script 6 in actionYuri Trukhin
 
Solit 2014, EcmaScript 6 in Action, Трухин Юрий
Solit 2014, EcmaScript 6 in Action, Трухин Юрий Solit 2014, EcmaScript 6 in Action, Трухин Юрий
Solit 2014, EcmaScript 6 in Action, Трухин Юрий solit
 
Лекция 3. Декораторы и модуль functools.
Лекция 3. Декораторы и модуль functools.Лекция 3. Декораторы и модуль functools.
Лекция 3. Декораторы и модуль functools.Roman Brovko
 
Лекция 12. Spark
Лекция 12. SparkЛекция 12. Spark
Лекция 12. SparkTechnopark
 
Инструменты для з̶а̶х̶в̶а̶т̶а̶ ̶м̶и̶р̶а̶ отладки в Tarantool
Инструменты для з̶а̶х̶в̶а̶т̶а̶ ̶м̶и̶р̶а̶  отладки в TarantoolИнструменты для з̶а̶х̶в̶а̶т̶а̶ ̶м̶и̶р̶а̶  отладки в Tarantool
Инструменты для з̶а̶х̶в̶а̶т̶а̶ ̶м̶и̶р̶а̶ отладки в TarantoolTimur Safin
 
Стажировка 2016-07-14 02 Евгений Тарасенко. JavaScript
Стажировка 2016-07-14 02 Евгений Тарасенко. JavaScriptСтажировка 2016-07-14 02 Евгений Тарасенко. JavaScript
Стажировка 2016-07-14 02 Евгений Тарасенко. JavaScriptSmartTools
 
Лекция 2. Всё, что вы хотели знать о функциях в Python.
Лекция 2. Всё, что вы хотели знать о функциях в Python.Лекция 2. Всё, что вы хотели знать о функциях в Python.
Лекция 2. Всё, что вы хотели знать о функциях в Python.Roman Brovko
 
Hacking PostgreSQL. Обзор исходного кода
Hacking PostgreSQL. Обзор исходного кодаHacking PostgreSQL. Обзор исходного кода
Hacking PostgreSQL. Обзор исходного кодаAnastasia Lubennikova
 
Лекция #5. Введение в язык программирования Python 3
Лекция #5. Введение в язык программирования Python 3Лекция #5. Введение в язык программирования Python 3
Лекция #5. Введение в язык программирования Python 3Яковенко Кирилл
 

Similar to Пакет purrr (13)

Ecma script 6 in action
Ecma script 6 in actionEcma script 6 in action
Ecma script 6 in action
 
Solit 2014, EcmaScript 6 in Action, Трухин Юрий
Solit 2014, EcmaScript 6 in Action, Трухин Юрий Solit 2014, EcmaScript 6 in Action, Трухин Юрий
Solit 2014, EcmaScript 6 in Action, Трухин Юрий
 
Лекция 3. Декораторы и модуль functools.
Лекция 3. Декораторы и модуль functools.Лекция 3. Декораторы и модуль functools.
Лекция 3. Декораторы и модуль functools.
 
Основы Python. Функции
Основы Python. ФункцииОсновы Python. Функции
Основы Python. Функции
 
Лекция 12. Spark
Лекция 12. SparkЛекция 12. Spark
Лекция 12. Spark
 
Scala для всех (РИФ 2015)
Scala для всех (РИФ 2015)Scala для всех (РИФ 2015)
Scala для всех (РИФ 2015)
 
Decorators' recipes
Decorators' recipesDecorators' recipes
Decorators' recipes
 
Scala - my path
Scala - my pathScala - my path
Scala - my path
 
Инструменты для з̶а̶х̶в̶а̶т̶а̶ ̶м̶и̶р̶а̶ отладки в Tarantool
Инструменты для з̶а̶х̶в̶а̶т̶а̶ ̶м̶и̶р̶а̶  отладки в TarantoolИнструменты для з̶а̶х̶в̶а̶т̶а̶ ̶м̶и̶р̶а̶  отладки в Tarantool
Инструменты для з̶а̶х̶в̶а̶т̶а̶ ̶м̶и̶р̶а̶ отладки в Tarantool
 
Стажировка 2016-07-14 02 Евгений Тарасенко. JavaScript
Стажировка 2016-07-14 02 Евгений Тарасенко. JavaScriptСтажировка 2016-07-14 02 Евгений Тарасенко. JavaScript
Стажировка 2016-07-14 02 Евгений Тарасенко. JavaScript
 
Лекция 2. Всё, что вы хотели знать о функциях в Python.
Лекция 2. Всё, что вы хотели знать о функциях в Python.Лекция 2. Всё, что вы хотели знать о функциях в Python.
Лекция 2. Всё, что вы хотели знать о функциях в Python.
 
Hacking PostgreSQL. Обзор исходного кода
Hacking PostgreSQL. Обзор исходного кодаHacking PostgreSQL. Обзор исходного кода
Hacking PostgreSQL. Обзор исходного кода
 
Лекция #5. Введение в язык программирования Python 3
Лекция #5. Введение в язык программирования Python 3Лекция #5. Введение в язык программирования Python 3
Лекция #5. Введение в язык программирования Python 3
 

More from Алексей Селезнёв

Воркшоп: Анализ показателя качества ключевых слов в Google Ads API с помощью ...
Воркшоп: Анализ показателя качества ключевых слов в Google Ads API с помощью ...Воркшоп: Анализ показателя качества ключевых слов в Google Ads API с помощью ...
Воркшоп: Анализ показателя качества ключевых слов в Google Ads API с помощью ...Алексей Селезнёв
 

More from Алексей Селезнёв (20)

Воркшоп: Анализ показателя качества ключевых слов в Google Ads API с помощью ...
Воркшоп: Анализ показателя качества ключевых слов в Google Ads API с помощью ...Воркшоп: Анализ показателя качества ключевых слов в Google Ads API с помощью ...
Воркшоп: Анализ показателя качества ключевых слов в Google Ads API с помощью ...
 
14. мета пакет.pdf
14. мета пакет.pdf14. мета пакет.pdf
14. мета пакет.pdf
 
gargle.pdf
gargle.pdfgargle.pdf
gargle.pdf
 
12.wrapping-apis.pdf
12.wrapping-apis.pdf12.wrapping-apis.pdf
12.wrapping-apis.pdf
 
10.release_on_cran.pdf
10.release_on_cran.pdf10.release_on_cran.pdf
10.release_on_cran.pdf
 
10.website.pdf
10.website.pdf10.website.pdf
10.website.pdf
 
9-vignetts.pdf
9-vignetts.pdf9-vignetts.pdf
9-vignetts.pdf
 
function_docs.pdf
function_docs.pdffunction_docs.pdf
function_docs.pdf
 
07-testing.pdf
07-testing.pdf07-testing.pdf
07-testing.pdf
 
6.dependecies.pdf
6.dependecies.pdf6.dependecies.pdf
6.dependecies.pdf
 
DESCRIPTION.pdf
DESCRIPTION.pdfDESCRIPTION.pdf
DESCRIPTION.pdf
 
Add data to r package
Add data to r packageAdd data to r package
Add data to r package
 
3-r-code.pdf
3-r-code.pdf3-r-code.pdf
3-r-code.pdf
 
integration_between_rstudio_and_github.pdf
integration_between_rstudio_and_github.pdfintegration_between_rstudio_and_github.pdf
integration_between_rstudio_and_github.pdf
 
create_package_1.pdf
create_package_1.pdfcreate_package_1.pdf
create_package_1.pdf
 
Бекенды dplyr
Бекенды dplyrБекенды dplyr
Бекенды dplyr
 
Пакет future
Пакет futureПакет future
Пакет future
 
Многопоточность в R
Многопоточность в RМногопоточность в R
Многопоточность в R
 
Функции семейства apply
Функции семейства applyФункции семейства apply
Функции семейства apply
 
Циклы в R
Циклы в RЦиклы в R
Циклы в R
 

Пакет purrr

  • 1. Как не использовать циклы в языке R Пакет purrr Алексей Селезнёв
  • 2. Сильные стороны пакета purrr • Функции purrr хорошо сочетаются с конвейерами magrittr • Функции purrr являются типоустойчивыми, и возвращают результат в ожидаемом формате, в базовом R это реализовано только в функции vapply(). • Функции purrr поддерживают сокращённый синтаксис за счёт формул. • Функции purrr могут итерироваться одновременно по любому количеству объектов считывая данные для аргументов функций из фрейма. • Пакет purrr позволяет по очереди применить набор разных функций к объектам. • purrr имеет набор функций для обработки ошибок, полученных в результате итерирования. • …
  • 3. Семейства функций в purrr • map_* - итерируются по объекту подобно функциям семейства apply* • pmap_* - позволяет итерировать по любому количеству объектов, принимая аргументы применяемой функции в виде таблицы или списка • invoke_map – позволяет применять различные функции к объекту • walk* - выполняют действия не возвращая результат, например сохраняют файлы • keep и discord – функции фильтрующие результат • reduce и accumulate – функции которые применяют по очереди заданную функцию к парам объектов • possibly, safely, quietly - функции обработки ошибок
  • 4. Семейство map() - функции • map() – аналог lapply(), возвращает список • map_lgl() – возвращает логический вектор • map_chr() – возвращает текстовый вектор • map_int() – возвpащает целочисленный вектор • map_dbl() – возвращает вектор чисел с плавающей запятой • map_df(), map_dfr(), map_dfc() – возвращают таблицу
  • 5. Семейство map() - аргументы • .x – объект, элементы которого необходимо перебрать • .f– функция, которую будем применять • … - аргументы функции.f • .id – позволяет добавить столбец с идентификатором элемента входящего объекта (доступно только в map_dfr*())
  • 6. Итерирование одновременно по нескольким объектам • map2_*() – итерирование по двум объектам • pmap_*() – итерирование более чем по двум объектам
  • 7. Синтаксис формул в purrr Знак тильды (~) заменяет function(.x) Обращение к аргументам анонимной функции: • Если аргумент один – точка • Если два аргумента .x и .y • Если более двух аргументов ..1, ..2, ..3 и т.д.
  • 8. Функции walk(), walk2() и pwalk() • Сохранение данных в файл • Сохранение графиков в файл • Отправка сообщений • Любые другие действия, в которых вы не ожидаете от функции исходящих данных
  • 9. Функции keep() и discord() Позволяют фильтровать полученные результаты по заданному условию
  • 10. Функции invoke_*() Позволяют применять несколько функций к объектам
  • 11. Функции reduce() и accumulate() • reduce() – применяет функцию с двумя основными входными переменными и повторно применяет её к списку до тех пор, пока не останется хотя бы один элемент. • accumulate() – аналогична reduce(), но удерживает все промежуточные результаты. Определения из книги «Язык R в задачах науки о данных»