Обложка канала

R4marketing | канал Алексея Селезнёва | Язык R. Страница 15

Автор канала Алексей Селезнёв, руководитель отдела аналитики в Netpeak, автор R пакетов: ryandexdirect, rfacebookstat и др. В канале публикуются статьи, доклады, новости, заметки по языку R.

  • R4marketing | канал Алексея Селезнёва | Язык R

    ​​Попался на глаза в открытом доступе в виде статьи на хабре перевод первой главы книги "Hands-On Programming With R" Гарретта Гроулмунда в соавторстве с Хедли Викхемом. Не бойтесь программировать! Любой может научиться программировать при правильной мотивации, а эта книга организована таким образом, чтобы поддерживать вас мотивированным. Это не справочник; это книга о трёх проблемах. Книга проведёт вас через увлекательные основы языка R и даже позволит заглянуть на следующий уровень сложности. Настоящие задачи являются лучшим способом обучения, потому что вы не запоминаете функции вне контекста, вы изучаете их для решения проблем из реального мира. Вы будете обучаться выполняя задания. В статье опубликован перевод не всей книги, тем не менее довольно большая её часть. #книги_по_R
  • R4marketing | канал Алексея Селезнёва | Язык R

    ​​Как создать кластеризированную таблицу в Google BigQuery с помощью R Кластеризированная таблица в Google BigQuery, это таблица, которая физически разбита на блоки, по значениям одного или нескольких столбцов. Зачем кластеризировать таблицу в BigQUery По смыслу процесс кластеризации очень похож на индексирование таблиц, т.е. вы упорядочиваете данные по значению столбцов, за счёт чего значительно увеличиваете скорость выполнения запросов. В BigQuery кластеризация не только снижает запросы, но и экономит деньги, т.к. при правильной работе с кластеризированной таблицей происходит сканирование только нужных блоков данных. Как создать кластеризированную таблицу с помощью bigrquery Синтаксис не особо очевидный, поэтому я и решил написать этот пост. Ниже пример создания простейшей кластеризированной таблицы:
     
    library(bigrquery)
    library(magrittr)
    
    bq_auth(email = '[email protected]')
    
    ds <- bq_dataset(project = "my_proj", dataset = 'my_ds')
    
    # тестовые данные
    df <- data.frame(
      gr = c('a', 'a', 'a', 'b', 'b'),
      val = c(3, 5, 1, 3,4)
    )
    
    # создаём кластеризированную таблицу
    bq_mtcars <- bq_table_create(
      bq_table(ds, 'cluster_tbl'),
      clustering = list(fields = "gr"),
      fields = as_bq_fields(df)
    )
    
    # записываем данные
    bq_table(project = "my_proj",
             dataset = "my_ds",
             table   = "cluster_tbl") %>%
      bq_table_upload(
        values = df,
        write_disposition = "WRITE_APPEND"
    )
    
    # запрашиваем данные
    sql <- "SELECT * FROM my_ds.cluster_tbl WHERE gr = 'b'"
    bq_df <- bq_project_query('choice31', sql) %>%
             bq_table_download()
    Т.е. для создания кластеризированной таблицы необходимо: 1. Использовать аргумент clustering передав в него список столбцов для кластеризации. 2. Передать в аргумент fields структуру будущей таблицы с помощью as_bq_fields(df). Как правильно запрашивать данные из кластеризированной таблицы Вы можете запрашивать данные из кластеризированной таблицы также, как и из обычной. Но для того, что бы получить эффект от кластеризации соблюдайте следующие правила: ● Кластеризация работает при фильтрации данных в блоке WHERE, и агрегации данных используя блок GROUP BY. ● Соблюдайте порядок обращения к столбцам, такой же как указывали при кластеризации. ● Нельзя использовать в выражении фильтрации кластеризированное поле, с каким либо другим полем. ● Используйте только простейшие выражения, например нельзя использовать при фильтрации по кластерному полю функции его преобразования. Ссылки: - Introduction to clustered tables - Creating and using clustered tables - Querying clustered tables #заметки_по_R
  • R4marketing | канал Алексея Селезнёва | Язык R

    ​​Как расположить несколько ggplot2 графиков на одном изображении Для расположения сразу нескольких графиков на одном изображении удобно использовать пакет patchwork. patchwork по сути решает туже проблему, что и gridExtra::grid.arrange() и cowplot::plot_grid(), но имеет более простой синтаксис. Рассмотрим несколько примеров:
      
    library(ggplot2)
    library(patchwork)
    
    # создаём 2 графика
    p1 <- ggplot(mtcars) + geom_point(aes(mpg, disp))
    p2 <- ggplot(mtcars) + geom_boxplot(aes(gear, disp, group = gear))
    
    # располагаем их на одном изображении
    p1 + p2
    
    
    Пример более сложного макета, в котором 3 графика будут располагаться в верхней части изображения, и один в нижней.
     
    p3 <- ggplot(mtcars) + geom_smooth(aes(disp, qsec))
    p4 <- ggplot(mtcars) + geom_bar(aes(carb))
    
    (p1 | p2 | p3) /
          p4
    
    
    Так же управлять макетом изображения вам позволяет функция plot_layout():
     
    p1 + p2 + p3 + p4 + 
      plot_layout(ncol = 3)
    
    
    Аргументы функции plot_layout(): ncol, nrow - Размеры создаваемой сетки, если оба равны NULL, для установки размеров будет использоваться та же логика, что и при использовании facet_wrap(). ● byrow - Аналогично byrow в matrix(). При значении FALSE, графики будут заполнены по столбцам. ● widths, heights - Относительная ширина и высота каждого столбца и строки в сетке. Будет повторяться, чтобы соответствовать размерам сетки. ● guides - Позволяет расположение общей легенды объединяемых графиов, принимает одно из следующих значений: 'collect', 'keep', 'auto' ● tag_level - Автопометка графиков, принимает одно из следующих значений: 'keep', 'new' ● design - Спецификация расположения областей графиков на макете. Пример работы с аргументом design
     
    p1 <- ggplot(mtcars) + geom_point(aes(mpg, disp))
    p2 <- ggplot(mtcars) + geom_boxplot(aes(gear, disp, group = gear))
    p3 <- ggplot(mtcars) + geom_bar(aes(gear)) + facet_wrap(~cyl)
    p4 <- ggplot(mtcars) + geom_bar(aes(carb))
    p5 <- ggplot(mtcars) + geom_violin(aes(cyl, mpg, group = cyl))
    
    # пример 1
    design <- c(
      area(1, 1, 2),
      area(1, 2, 1, 3),
      area(2, 3, 3),
      area(3, 1, 3, 2),
      area(2, 2)
    )
    
    p1 + p2 + p3 + p4 + p5 + plot_layout(design = design)
    
    # пример 2
    design <- "
      122
      153
      443
    "
    p1 + p2 + p3 + p4 + p5 + plot_layout(design = design)
    Результат работы этого примера вы видите на изображении к посту. Ссылки: - сайт пакета patchwork #заметки_по_R
  • Реклама

  • R4marketing | канал Алексея Селезнёва | Язык R

    Видео урок "Авторизация в Google Ads API и запрос иерархии аккаунтов" Друзья, 27 апреля прекращается поддержка Google AdWords API, с которым работает устаревший пакет RAdwords. В связи с чем, я начал работу над серией видео уроков по работе с более новым пакетом rgoogleads, который работает с Google Ads API. В первом видео я рассказал как пройти авторизацию, создать собственные учётные данные, необходимые для работы с Google Ads API, и запросить структуру ваших аккаунтов. Тайм коды: 00:00 Вступление 00:57 Варианты авторизации в пакете rgoogleads 02:33 Пример авторизации в Google Ads API с использованием параметров по умолчанию 03:57 Какие учётные данные необходимо создать, для авторизации в Google Ads API 04:43 Как создать управляющий аккаунт Google Ads и запросить токен разработчика 08:55 Как создать и настроить проект в Google Cloud для работы с Google Ads API 13:00 Настройка конфигурации авторизации в пакете rgoogleads 18:56 Переменные среды в пакете rgoogleads 20:33 Опции пакета rgoogleads 21:49 Работа с иерархией аккаунтов в Google Ads API 26:19 Заключение Смотрите также: - Опубликовано видео моего доклада "Зачем интернет маркетологу понимать что такое API. Разбираем устройство API Google Ads", с которым я выступал летом на 8P. - Миграция с Google AdWords API на Google Ads API: подробный мануал #видео_уроки_по_R
    rgoogleads #1: Авторизация в Google Ads API и запрос иерархии аккаунтов с помощью языка R

    Это первое видео из серии уроков по работе с Google Ads API на языке R. В нём мы разберёмся с тем, что вам необходимо для прохождения авторизации, как получи...

    YouTube
  • R4marketing | канал Алексея Селезнёва | Язык R

    ​​Исследование оттока сотрудников департамента исследований и разработок Автор: Маматкулов Отабек Я выбрал именно эту тему исходя из важности и высокой стоимости найма новых сотрудников, которые обычно начинают числиться в штабе компании в результате прохождегия различных стадий отбора - то есть наем нового сотрудника не является случайным, и может быть изучен более очевидными подходами, чем поведение клиентов. В отличие от уходящих клиентов, покидающий компанию сотрудник приносит больше убытков, так как привлекать новых сотрудников дороже из-за издержек на хантинг и последующее обучение. Аналогично и со стороны прибыли - новый сотрудник обычно приносит больше прибыли, чем сотни новых клиентов. Кроме этого, в компаниях есть различные департаменты со совей спецификой, и исследовать их стоит по-отдельности. В данном проекте я планирую выявить одну из значимых зон уязвимости удержания сотрудников компании, чтобы предложить своё решение по удержжанию сотрудников направления “R&D” для компании, специализирующейся именно в этом направлении. Я подозреваю, что компаниия около-фармацевтическая, но на анализе это не отражается. Более подробную информацию предоставлю в следующих частях работы. Содержание: - Задача - Анализ - Данные и логика анализа - Модель - Симуляция - Дэшборд - Общие выводы #статьи_по_R
  • R4marketing | канал Алексея Селезнёва | Язык R

  • R4marketing | канал Алексея Селезнёва | Язык R

    ​​Статистическая мощь языка R в Greenplum с клиентом GreenplumR Сегодня рассмотрим, как использовать статистический язык R для анализа данных в Greenplum. Greenplum – open-source продукт, массивно-параллельная реляционная СУБД для хранилищ данных с гибкой горизонтальной масштабируемостью и столбцовым хранением данных на основе PostgreSQL. GreenplumR - R пакет для работы с Greenplum. #статьи_по_R
  • R4marketing | канал Алексея Селезнёва | Язык R

    ​​Построение bullet в R Bullet chart (пулевая диаграмма, диаграмма-шкала или диаграмма-термометр) очень удобно использовать для отслеживания выполнения KPI. При чём оценка может быть относительно пессимистического, реального и оптимистического прогноза. Как построить bullet chart в R Как всегда для этой цели в R есть готовые пакеты, например bulletchartr. Установить bulletchartr в данный момент можно только с GitHub командой devtools::install_github("ACDIVOCATech/bulletchartr"). Пример построения простой пулевой диаграммы
    library(bulletchartr)
    
    # загрузка тестовых данных
    data('bc_ex')
    
    # обычная пулевая диаграмма
    bullet_chart(dataframe = bc_ex)
    
    
    Функция bullet_chart() имеет следующие аргументы: ● file_name - путь к Excel файлу с данными ● sheet_name - название листа в файле ● dataframe - data.frame с данными ● indicator_name - имя столбца, в котором есть имена вашего индикатора / KPI ● info - дополнительная информация для индикаторов (валюта, процент, символ и т. д.) ● current - текущее значение индикатора ● low - имя столбца с пессимистическим планом ● medium - имя столбца с реалистическим планом ● high - имя столбца с оптимистическим планом ● target - имя столбца с целью ● remove_no_targets - удалить индикаторы без указанного "целевого" значения ● legend - показать легенду Пулевые диаграммы с учётом времени Функции bullet_chart_symbols(), bullet_chart_wide(), and bullet_chart_vline() имеют другой масштаб оси x, по сравнению с диаграммами построенными функцией bullet_chart.
    bullet_chart_wide(
      file_name = read_example("Indicators_Targets_ext.xlsx"),
      cal_type = "cal"
    )
    
    
    В данном случае ось X представляется как процент от годовой цели, так и процент прошедшего года. Есть вертикальная линия, показывающая TODAY, которая показывает, в каком процентном соотношении в году и в каком процентном отношении к цели мы находимся прямо сейчас. Если мы приближаемся к линии TODAY или за ней, то цвет внутри полосы зеленый, когда мы близки к достижению цели - цвет оранжевый, , и если мы сильно отстаем от графика / цели, цвет красный. Описанные в этом разделе функцию имеют несколько другой набор аргументов: ● actual - имя столбца с актуальным значением достижения KPI ● actual_lastweek - имя столбца, в котором хранится фактические значение достижения KPI за прошлую неделю ● actual_lastyear - имя столбца, в котором хранится фактические значение достижения KPI за прошлый год ● target - имя столбца с плановым показателем KPI ● for_year - отчётный год ● cal_type - какой календарь вы используете. Возможные варианты: «fis» для финансового года, начинающегося 1 октября, «cal» для календарного года, начинающегося 1 января, или введите собственную дату в формате «ГГГГ / ММ / ДД» И несколько других, менее важных аргументов. Ссылки: - Проект пакета на GitHub #заметки_по_R
  • R4marketing | канал Алексея Селезнёва | Язык R

    ​​Tidy stemming велосипед, который поехал Когда в NLP задачах речь доходит до стемминга, то никто особо не заморачивается - берет готовую реализацию, и она работает. Правда работает она только в тех случаях, когда текст является "классическим", то есть это человекочитаемый текст без огромного числа сокращений слов , и сами слова не являются транслитерацией с чужого языка. Но что делать когда в качестве текста приходит например массив названий продуктов из внешних баз данных большого числа поставщиков и надо как-то автоматизировать классификацию (разные по написанию продукты свести к одному эталонному)? Здесь классический стемминг остается не у дел, а вот о его замене в этой статье и поговорим. #статьи_по_R
  • R4marketing | канал Алексея Селезнёва | Язык R

    ​​Создание интерактивных карт с помощью leaflet Автор: Артём Голубничий Видео урок и практическое занятие по работе с пакетом *leaflet*, который позволяет строить интерактивные карты в R. Ссылки: - видео урок - практика Смотрите также: - запись воскресного скRинкаста по работе leaflet - 2 видео урока о построении карт на языке R #видео_уроки_по_R
  • R4marketing | канал Алексея Селезнёва | Язык R

  • R4marketing | канал Алексея Селезнёва | Язык R

    ​​Какие изменения нас ждут в R 4.2.0 Ниже перечислю основные изменения в предстоящем релизе: ● В R 4.2.0 был улучшен нативный пайп |>, теперь с помощью нижнего подчёркивания вы можете прокидывать результат предыдущей операции, не только в первый аргумент следующей функции, но и в любой другой именованный аргумент.
     
    # This works in R 4.2
    mtcars |>
      lm(mpg ~ disp, data = _)
    ● Была улучшена страница справки, например примеры в блоке Examples теперь можно запустить кликом по ссылке "Run examples" ● Операторы while() и if() теперь возвращают ошибку, если заданное условие имеет длинну более 1:
     
    if (1:2 == 1) do_something()
    # Error in if (1:2 == 1) do_something() : the condition has length > 1
    ● В Windows прекращена поддержка 32 битной версии R ● На Windows пользовательская библиотека пакетов перемещена с R\win-library\x.y (где x.y номер версии R) в скрытую директорию данных приложений C:\Users\username\AppData\Local. Ссылки: - Информация данного поста заимствована из статьи "New features in R 4.2.0" - Скачать R 4.2.0 alpha для Windows можно по ссылке #новости_и_релизы_R
  • R4marketing | канал Алексея Селезнёва | Язык R

    ​​Список разработанных мной курсов и учебников по языку R В этом сообщение я собрал все разработанные мной учебные материалы, т.е. не отдельный видео уроки или статьи, а курсы и учебники включающие как теоретический материал так и задания и тесты. К каждому из материалов прилагаю уровень сложности и краткое описание. Проходить курсы рекомендую в том же порядке, в котором я их перечислил. Что означают указанные уровни сложности: Низкий - можно проходить не имея никакого опыта программирования и работы с языком R Средний - необходимо иметь базовой понимание синтаксиса языка R Высокий - требует от вас уверенного владение языком R 1. Курс "Язык R для пользователей Excel" Уровень сложности: низкий Описание: Курс предназначен для новичков, и даёт понимание о том, как с помощью языка R выполнять манипуляцию данными, от чтение данных из различных файлов, до их сложных преобразований и визуализации. 2. Курс "Введение в dplyr 1.0.0" Уровень сложности: средний Описание: Является логическим продолжением предыдущего курса, Курс родился из серии публикаций Хедли Викхема, предшествовавших релизу dplyr 1.0.0. Данный курс поможет вам разобраться с этими обновлениями. 3. Курс "Циклы и функционалы в языке R" Уровень сложности: средний Описание: Данный курс также является логическим продолжением описанных выше, и познакомит вас с итерациоными конструкциями и многопоточностью языка R. 4. Учебник "Разработка telegram ботов на языке R" Уровень сложности: высокий Описание: Учебник поможет вам разобраться с ботостроением на языке R. Я крайней не рекомендую начинать изучение языка с этого учебника, т.к. он очень узконаправлен и требует хорошего владения языком R для прохождения. #курсы_по_R
  • R4marketing | канал Алексея Селезнёва | Язык R

    ​​Бесплатный курс "Циклы и функционалы в языке R" Друзья, рад представить вам свой новый курс "Циклы и функционалы в R". Курс и все сопутствующие материалы к нему распространяются бесплатно, и являются общедоступными. Программа курса: ● Циклы for, while и repeat ● Обработка ошибок: конструкции try() и tryCatch() ● Функции семейства apply ● Итерирование с помощью функций пакета purrr ● Обработка ошибок: функции safely(), possibly(), quietly() ● Введение в многопоточность, пакеты: foreach, doFuture, pbapply, furrr ● Реализация многопоточности с помощью пакета future ————————— В военное, и любое другое кризисное время наиболее правильной инвестицией времени является обучение. Поэтому надеюсь, что этот курс многим в текущей ситуации будет полезен. Планирую в апреле постепенно возвращаться к регулярным публикациям в канале, не смотря на то, что война продолжается, необходимо работать, обучаться и продолжать жить. ————————— #курсы_по_R
  • R4marketing | канал Алексея Селезнёва | Язык R

    Многопоточность в R: пакет future Пакет future является ядром библиотеки futureverse, и пожалуй самым мощным интерфейсом параллельного программирования на языке R. В ходе урока мы разберём его интерфейс и функционал на нескольких практических примерах. Тайм коды: 00:00 Вступление 01:15 Явное и неявное объявление фьючерсов 04:33 Аргументы функции future 05:40 Локальное окружение фьючерса 06:42 Стратегии выполнения вычислений в пакете future 08:20 Как менять стратегию выполнения кода с помощью future 10:42 Настройка плана cluster 12:09 Вложенные друг в друга фьючерсы 18:00 Отладка ошибок в фьючерсах 19:03 Многопоточное итерирование с помощью future 21:58 Пример использования future в многопоточном режиме 26:07 Опции и переменные среды пакета future 28:00 Другие пакеты входящие в библиотеку futureverse 29:10 Заключение ————————— Этот видео урок должен был быть опубликован ещё 1 марта. С момента запуска канала, я старался держать темп на уровне хотя бы одной публикации в будний день, но в условиях войны это невозможно. Тем не менее, цель данного канала - образование, и в текущей ситуации для многих вопрос образования очень актуален, к тому же у меня были записаны и смонтированы несколько уроков ещё в декабре - январе, и уже готов курс "Циклы и функционалы в языке R". Курс постараюсь опубликовать в свободный доступ уже на следующей неделе. ————————— #видео_уроки_по_R
    Многопоточность в R: пакет future

    Это видео продолжает начатую ранее тему многопоточности в R. Пакет future является ядром библиотеки futureverse, и пожалуй самым мощным интерфейсом параллель...

    YouTube
  • Реклама

  • R4marketing | канал Алексея Селезнёва | Язык R

    ​​Уже 6 день в моей стране идут военные действия. Я русский по национальности и украинец по гражданству. У меня много родственников и друзей в России. Я родился на Дальнем Востоке в семье офицера радио разведки, моего отца нет уже 10 лет, но он даже в самых страшных кошмарах не мог бы представить того, что случилось 24 февраля. Я до последнего не верил, что Россия может напасть на Украину. Подавляющая часть аудитории канала из России. Я уверен, что у меня в канале грамотные и здравомыслящие люди и в целом в России много хороших людей, которые не поддерживают эту войну, и понимают, что это не спец операция, а самая настоящая война. Поражают не только объекты военной инфраструктуры, но и жилые дома, страдает гражданское население, люди сутками находятся в бомбоубежищах. Если вы не поддерживаете эту войну, то помогите нам её остановить, высказывайте свою позицию в соц сетях, кто не боится - выходите на митинги. На сегодня у меня была запланирована публикация нового видео урока, но сейчас он не имеет никакого значения, поэтому я просто оставлю тут код, с помощью которого вы в R можете на графике изобразить флаг Украины.
     
    plot.new()
    polygon(x = c(0, 1, 1, 0), y = c(0, 0, 0.5, 0.5), col = "#FFDD00")
    polygon(x = c(0, 1, 1, 0), y = c(0.5, 0.5, 1, 1), col = "#0057B7")
  • R4marketing | канал Алексея Селезнёва | Язык R

    Скриптовый язык R позволяет эффективно решить любую задачу из области статистики и data science как с точки зрения расчетов, так и с точки зрения визуализации. Помимо специализированных расчетов с помощью R существуют BI системы, которые позволяют с помощью удобного функционала разложить данные компании по полочкам 📈, а также быстро масштабировать создание и доставку отчетности до конечных пользователей за минимальное время ⏳. Одной из такой BI систем является Qlik Sense (QS). Про этот инструмент можно найти много полезной информации (книги, статьи, бесплатные курсы) на канале @qlik_insight. Несколько основных фактов про клик: 💡 Основная фича Qlik - ассоциативный механизм связывания данных. Она значительно облегчает восприятие контекста (как связаны между собой сущности аналитической модели на основе данных), а следовательно способствует формированию правильных выводов, полученных на основе данных. 💡 В QS есть встроенный ETL - поэтому эту BI можно начать использовать еще до проектирования хранилища данных (или использовать его вместо хранилища). 💡 Данные, рассчитанные в модели можно сохранить в QVD и переиспользовать в других моделях или других инструментах. Делается это 1 командой. 💡 Загрузка данных из qvd - десятки млн строк за секунды. 💡 Отсутствует краткое увеличение расходов 💸 на лицензирование BI в случае масштабирования решения Qlik с небольшого сервера до кластера из нескольких мощных нод. 💡 Можно настроить версионирование скриптов загрузки и преобразования данных через git. 💡 Внутренний AI предлагает выбрать сразу же после загрузки данных подходящие визуализации и опубликовать их на дашборд. No-code BI в действии) Автор канала Шамаев Иван делится самыми интересными и актуальными материалами по Qlik Sense - https://t.me/qlik_insight
    QlikSense ! Qlik Sense ! QlikView

    Канал про QlikView и Qlik Sense технологии. Бизнес-аналитика от автора https://ivan-shamaev.ru и эксперта https://qliksense.ivan-shamaev.ru Книги по QlikView, Qlik Sense. Лучшие практики по проектированию, визуализации информации. Вопросы: @ivanshamaev

    Telegram
  • R4marketing | канал Алексея Селезнёва | Язык R

    ​​Продвинутый unnest и его неизвестные аргументы При парсинге сложных списков, полученных в виде ответа от различных API я зачастую использую функции tidyr::unnest_longer() и unnest_wider(). Все пакеты входящие в tidyverse имеют шикарную, наверное лучшую, документацию. Все функции имеют детальное описание, и огромное количество примеров кода их использования. Но в функциях разворачивания списков, таких как hoist(), unnest_longer() и unnest_wider(), есть несколько аргументов, которые имеют лишь краткое описание, но примеров их использования нет. Да и мои попытки нагуглить варианты их использования не увенчались успехом. Ниже мы разберём аргументы ptype и transform доступные в unnest_*() функциях. Описание аргументов: ● transform, .transform - Необязательный аргумент, принимает именованный список функций преобразования, применяемых к каждому компоненту. Используйте эту функцию, если вы хотите преобразовать или проанализировать отдельные элементы по мере их разворачивания. ● ptype, .ptype - Необязательный аргумент, принимает именованный список прототипов, объявляющий желаемый тип вывода каждого компонента. Используйте этот аргумент, если вы хотите проверить, что каждый элемент имеет типы, которые вы ожидаете при разворачивании списка. Примеры использования: Для начала сгенерируем тестовый набор данных:
     
    # тестовый список
    test_list <- list(
      list(name = 'John', 
           age  = '37',
           children = list('Paul', 'Ron')),
      list(name = 'Tim', 
           age  = '25',
           children = list('Liza'))
    )
    Пробуем развернуть этот список, не используя дополнительные аргументы:
     
    # первая попытка развёртывания
    tibble(uncol = test_list) %>% 
      unnest_wider(uncol)
    
    # A tibble: 2 x 3
      name  age   children  
      <chr> <chr> <list>    
    1 John  37    <list [2]>
    2 Tim   25    <list [1]>
    Какие проблемы мы можем решить с помощью аргументов ptype и transform Итак, вроде мы развернули наш список, но появилось две проблемы, которые далее мы исправим. 1. Возраст в поле age является текстом, требуется привести его к целочисленному типу. 2. Поле children по прежнему является списком, а нам необходимо сделать так, что бы имена детей, были перечислены в одной ячейке через запятую. Аргумент ptype ptype позволяет вам добавить проверку типов данных, выходящего тиббла, например в следующем примере мы добавим проверку поля age.
     
    # добавляем проверку типа данных в поле age
    tibble(uncol = test_list) %>% 
      unnest_wider(
        uncol, 
        ptype = list(age = 2)
    )
    
    Error: Can't convert <character> to <double>.
    Сообщение об ошибке малоинформативное, но суть не меняется, мы проверяем тип данных в указанных полях , и если какое то из полей не соответствует указанному прототипу - мы получим ошибку. Прототип - это просто образец данных нужного типа, если мы хотим убедиться, что какое то поле является целым числом, то необходимо в качестве прототипа передать любое целое число, я использовал 2, но вместо него можно передать любое другое целое число. Аргумент transform Аргумент transform позволит нам решить описанные ранее проблемы, а именно: 1. Преобразовать поле age в целочисленный тип. 2. Объединить элементы вложенного поля children через запятую, избавившись от вложенности.
     
    # используем ptype и transform
    tibble(uncol = test_list) %>% 
      unnest_wider(
        uncol, 
        transform = list(
          children = function(x) paste(x, collapse = ', '),
          age = as.integer),
        ptype = list(age = 2),
    ) 
    
    # A tibble: 2 x 3
      name    age children 
      <chr> <dbl> <chr>    
    1 John     37 Paul, Ron
    2 Tim      25 Liza 
    Ссылки: - видео урок по работе с функциями разворачивания списков - перевод виньетки "Rectangling" #заметки_по_R