TG Telegram Group Link
Channel: R4marketing | канал Алексея Селезнёва | Язык R
Back to Bottom
Опубликован 6 урок курса "Разработка пакетов на R" - Управление зависимостями пакета

Вряд ли вы будете писать свой пакет на чистом R, используя исключительно его базовый функционал, наверняка вы в коде пакете так же будете использовать функции из других пакетов, а это значит ваш пакет будет иметь набор зависимостей от этих сторонних пакетов. В этом уроке мы разберём тему зависимостей пакетов.

Тайм коды:
00:00 Вступление
00:50 Преимущества и недостатки зависимостей
02:41 Анализ зависимостей пакетов
05:50 Какие компоненты пакета отвечают за его зависимости
07:37 Файл NAMESPACE
08:35 Рабочий процесс установки зависимостей
14:56 Когда стоит импортировать объекты из других пакетов
16:38 Как обращаться к функциям импортированным из других пакетов в коде, тестах и примерах вашего пакета, если поля указаны в поле Imports
18:04 Как обращаться к функциям импортированным из других пакетов в коде вашего пакета, если поля указаны в поле Suggest
21:34 Как обращаться к функциям импортированным из других пакетов в тестах вашего пакета, если поля указаны в поле Suggest
23:10 Как обращаться к функциям импортированным из других пакетов в виньетках и примерах к функциям вашего пакета, если поля указаны в поле Suggest
24:26 Как обращаться к функциям импортированным из других пакетов в коде, тестах и примерах вашего пакета, если поля указаны в поле Depends
26:05 Импорт и экспорт S3 методов
28:30 Заключение

Ссылки:
1. Сайт курса
2. Видео на YouTube
3. Поддержать курс

#курсы_по_R
Опубликован 7 урок курса по разработке пакетов на R: Разработка юнит-тестов к функциям вашего пакета

Вряд ли вы остановитесь на выпуске первой версии вашего пакета, скорее всего со временем вы будете улучшать и расширять его существующий функционал, а значит вносить в старый код изменения. Любые внесённые изменения могут сломать работающий ранее код, что бы избегать таких ситуаций вам и понадобятся юнит тесты, которые будут запускать и проверять работу всех функций вашего пакета, при любых внесённых изменениях.

Тайм коды:
00:00 Вступление
00:54 Неформальный процесс тестирования
03:10 Рабочий процесс тестирования
05:44 Настройка проекта пакета для тестирования
08:34 Как создать файл тестирования для функции
10:36 Как организованы файлы тестирования
15:16 Функции-ожидания, семейство expect_*()
20:07 Запуск тестов
23:41 Snapshot тесты
28:41 Управление Snapshot тестами
31:02 Заключение

Ссылки:
1. Сайт курса
2. Видео на YouTube
3. Поддержать курс можно тут или тут

#курсы_по_R
Опубликован 8 урок курса по разработке пакетов на R - Документирование функций пакет

Этим уроком мы начинаем обширную тему документации вашего пакета. В этом видео мы разберёмся с тем, как добавить документацию к функциям пакета с помощью специальных комментариев и пакета roxygen2.

Тайм коды:
00:00 Вступление
00:43 Какие компоненты пакета отвечают за документацию функций
01:31 Рабочий процесс
04:47 Структура roxygen комментариев
05:34 Особенности разметки roxygen комментариев
07:10 Из каких разделов состоит документация к функциям пакета
09:06 Title, Description и Details
12:07 Документирование аргументов функции
14:55 Возвращаемое функцией значение
16:42 Примеры использования функции
20:12 Повторное использование документации
22:23 Документация уровня пакета
23:50 Заключение

Ссылки:
1. Сайт курса
2. Видео на YouTube

#курсы_по_R
Опубликован 9 урок курса по разработке пакетов на R: Виньетки и прочая опциональная документация пакета

В этом уроке мы разберёмся с опциональной документацией уровня пакета:

* Виньетки - Статьи, подробно описывающие в свободной форме функционал пакета;
* README - Общее описание цели пакета и нескольких простых примеров его использования;
* NEWS - Файл в котором фиксируются все изменения вашего пакета.

Тайм коды:
00:00 Вступление
00:52 Что такое виньетки
01:45 Рабочий процесс создания виньеток
07:29 Метаданные виньетки
08:32 Разметка текста в Rmarkdown
14:24 Как добавить график в виньетку
16:19 Как добавить таблицу в виньетку
23:03 Опции чанков
28:01 Хранение исходников виньеток
28:47 Файл README
33:20 Файл NEWS
37:44 Заключение

Ссылки:
1. Сайт курса
2. Видео на YouTube

#курсы_по_R
Копірайтинг, рерайтинг і переклади — це контент-студія @WordFactory

✍️Українська, англійська, польська, німецька й інші мови.

Ми — офіційна компанія з ТОВ в Україні та Європі. Надаємо всі потрібні для бухгалтерії документи.

Спеціалізуємося на тематиках від digital, медицини, фінтеху до e-com.

Як ми працюємо:

👌Якісно
Кожен текст перевіряє редактор.

⚡️Швидко
До 10 000 символів — за добу; 1 000 000 тисячознаків на місяць.

☑️Відповідно до TЗ
Контроль унікальності, наявності ключів, відсутність текстів від штучного інтелекту.

Багато
До 30 фултайм-авторів в одному проєкті, до 500 тисячознаків на день.

Щоб познайомитися з WordFactory ближче, пишіть:

tg: @WordFactory
mail: [email protected]
http://surl.li/kwnxm

🎁Ваш промокод на знижку 25% на 1 перший текст: R4marketing06.10
Опубликован 10 урок курса по разработке пакетов на R: Разработка сайта пакета (пакет pkgdown)

К этому уроку мы уже изучили множество типов документации, которые можно добавить в ваш пакет, в этом уроке мы разберёмся с тем, как объединить всю разработанную ранее документацию и сформировать из неё сайт вашего пакета.

Тайм коды:
00:00 Вступление
01:13 Обзор рабочего процесса
02:41 Настройка пакет для разработки сайта
03:38 Запуск процесса создания сайта
04:09 Обзор разделов сайта пакета
05:21 Публикация сайта на GitHub, и настройка автоматической её пересборки при любом изменении пакета
06:40 Разница между виньеткой и статьёй сайта
07:42 Раздел reference, группировка и сортировка документации к функциям
11:01 Раздел articles, группировка и сортировка списка статей сайта
12:36 Управление навигационной панелью сайта
15:11 Управление боковой панелью сайта
17:50 Изменение темы сайта пакета
19:05 Разработка логотипа пакета
23:01 Как добавить счётчик Google Analytics на сайт пакета
23:51 Заключение

————————————
Не забывайте делиться ссылкой на курс у себя в соц. сетях, пока у него рекордно низкий охват, видео с трудом набирают пару десятков просмотров, а времени на создание курса ушло не мало, буду очень благодарен за репосты.
————————————

Ссылки:
1. Сайт курса
2. Видео на YouTube

#курсы_по_R
Опубликован 11ый урок курса по разработке пакетов на языке R: Публикация пакета в CRAN

За 10 предыдущих уроков мы подробно разобрали каждый этап процесса разработки собственного пакета, и наконец пришло время отправить пакет в основной репозиторий хранения R пакетов - CRAN. В этом уроке мы подробно разберём как подготовить свой пакет к публикации, и отправить его в CRAN.

Тайм коды:
00:00 Вступление
01:03 Настройка непрерывной интеграции для регулярной проверки вашего пакета на разных платформах с помощью GitHub Actions
03:43 Создаём issue со списком действий по подготовке и отправке новой версии пакета на CRAN
05:54 Действия при первой отправке пакета на CRAN
07:43 Проверка полей Title и Description файла DESCRIPTION
08:25 Дополнительные проверки и исправление ошибок
16:54 Отправка пакета на CRAN
21:27 Как проходит проверка вашего пакета на стороне CRAN
22:56 Что делать в случае отказа на публикацию пакета
24:27 Получаем письмо с результатами автопроверки CRAN
24:50 Сообщение о том, что ваш пакет успешно прошел проверку и будет опубликован в CRAN
25:14 Действия, которые необходимо выполнить после публикации пакета в CRAN
28:22 Заключение

Ссылки:
1. Сайт курса
2. Видео на YouTube

#курсы_по_R
Опубликован 12 урок курса по разработке пакетов на языке R: Разработка пакета-обёртки над API

В этом уроке мы разберёмся с тем, что такое API, из каких компонентов состоят HTTP запросы и ответы. И в целом на нескольких примерах разберём функционал пакета httr2, и то, как с его помощью написать пакет-обёртку над API.

Тайм коды:
00:00 Вступление
00:45 Что такое API
01:49 Компоненты HTTP запросов и ответов
03:26 Введение в пакет httr2
08:04 Функции пакета httr2
09:36 Этапы работы с API
10:10 Простейший пример обёртки над Faker API
18:44 Управление конфиденциальными данными
29:33 Пример обёртки над NYTimes Books API
30:51 Обработка ошибок в HTTP ответах
34:06 Ограничение скорости отправки запросов
37:18 Как работать с API токена в пакетах-обёртках над API
39:32 Протокол OAuth
41:00 Пример обёртки над Facebook API
49:46 Обзор всего рабочего процесса
52:11 Заключение

Ссылки:
1. Сайт курса
2. Видео на YouTube

#курсы_по_R
Опубликован 13ый урок курса по разработке пакетов на языке R: Разработка пакета-обёртки над Google API

Этот урок является логическим продолжением темы, начатой в прошлом, но тут мы поговорим о ещё более частном случае, о том, как написать обёртку над любым Google API. Компания Google разработала сотни полезных сервисов, которыми пользуются миллионы людей по всему миру, большинство этих сервисов предоставляют API, и в этом уроке мы разберёмся как обёртывать эти API в пакет. В ходе урока мы разберёмся со специальным пакетом gargle, который очень упрощает разработку пакетов взаимодействующих с Google API.

Тайм коды:
00:00 Вступление
00:55 Создание учётных данных в Google Cloud
08:52 Функционал пакета gargle
09:50 Пример работы с пакетом gargle
17:08 Обзор рабочего процесса создания пакета обёртки над Google API
17:34 Интерфейс авторизации
26:08 Объект отвечающий за состояние авторизации в вашем пакете
27:38 Как обращаться к токену для подписи HTTP запросов
29:54 Заключение

Ссылки:
1. Сайт курса
2. Видео на YouTube

#курсы_по_R
Друзья, каналу @R4marketing сегодня исполняется 5 лет, первый небольшой юбилей.

1 ноября 2018 года я сообщил о запуске канала у себя в facebook.

При желании можно поддержать канал по этой ссылке, либо переводом 5 USDT на TrustWallet по этой ссылке.

Спасибо вам!
Опубликован 14ый, и завершающий урок курса по разработке пакетов на языке R: Создание мета-пакета

В заключительном уроке курса мы с вами научимся создавать собственные мета пакеты. Мета пакет это не самостоятельный пакет, а просто коллекция объединённых пакетов, одним из наиболее известных мета-пакетов является tidyverse, в ядро которого входят такие пакеты как: dplyr, tidyr, ggplot2, stringr и т.д.

Это самый короткий урок данного курса.

Тайм коды:
00:00 Вступление
01:10 Пример создания мета-пакета с помощью пакета pkgverse
05:47 Аргументы функции pkgverse()
07:12 Заключение

————————————
Сегодня опубликован 14ый, и последний урок курса по разработке пакетов, работа над курсом продлилась ровно 3 месяца, 7 августа был опубликован 1ый урок, и сегодня - 7 ноября, последний.

Надеюсь курс поможет вам в написании своих собственных пакетов, если вы ранее ещё не имели такой практики, а тем кто уже активно пишет свои пакеты использовать наиболее продвинутые и современные техники в их разработке.

В ближайшие дни опубликую курс на bookdown, о чём тут отдельно сообщу.
————————————

Ссылки:
1. Сайт курса
2. Видео на YouTube

#курсы_по_R
Уес МакКинни присоединился к Posit (ex. RStudio)

Несомненно это пожалуй самая громкая новость в мире R как минимум за этот год. Ниже приведу перевод сообщения из рассылки Posit. в котором они поделились этой новостью.

Мы рады сообщить, что Уэс МакКинни присоединился к Posit!

—————————————
Уэс МакКинни — предприниматель и разработчик ПО с открытым исходным кодом, который за последние 15 лет внес значительный вклад в развитие сообществ науки о данных и аналитики.

Его пакет pandas стал стандартом для анализа и обработки данных Python. Его книга
«Python для анализа данных» научила целое поколение ученых, занимающихся данными, как продуктивно работать с новой платформой pandas, NumPy, matplotlib и Jupyter.

С момента создания pandas Уэс неустанно работал над тем, чтобы сделать основные системы, которые мы используем для обработки и анализа данных, масштабируемыми, совместимыми и компонуемыми с помощью таких проектов, как
Ibis , Apache Arrow и Feather .

И теперь мы очень рады сотрудничать с Уэсом и внести свой вклад в экосистему PyData. Когда мы сменили название на
Posit, нашей целью было объединить усилия для создания отличных инструментов для анализа данных, независимо от языка, и сотрудничество с Уэсом — огромный шаг вперед в реализации этой мечты.

Прочтите
сообщение в блоге Уэса, чтобы узнать больше о том, над чем он планирует работать в Posit. Нам не терпится увидеть, что он создаст в ближайшие годы!
—————————————

Пожелаем Уэсу успехов!

#новости_и_релизы_по_R
rlinkedinads - Пакет для работы с Linkedin Advertising API

Ранее никогда не приходилось работать с Linkedin API, но в этом месяце была задача написать скрипт, который бы запрашивал статистику их рекламного кабинета Linkedin, соответственно в ходе её решения появился пакет для работы с Linkedin Advertising API.

На данный момент в пакете реализован следующий функционал:

● Интерфейс авторизации
● Запрос всех объектов рекламного кабинета
● Запрос статистики из рекламного кабинета

Установить пакет можно из CRAN или Github:

install.packages('rlinkedinads')
pak::pak('selesnow/rlinkedinads')


Пример кода:
library(rlinkedinads)

lkd_set_login('ВАШ ЛОГИН')
lkd_set_account_id(ID ВАШЕГО РЕКЛАМНОГО АККАУНТА)

# Иерархия рекламного аккаунта
accounts <- lkd_get_accounts()
user_accounts <- lkd_get_accounts_by_authenticated_user()
account_users <- lkd_get_ad_account_users_by_accounts(account_urn_id = 'urn:li:sponsoredAccount:511009658')
campaign_groups <- lkd_get_campaign_groups()
campaigns <- lkd_get_campaigns()
creatives <- lkd_get_creatives()

# Запрос аналитики
report <- lkd_get_ads_analytics(
pivot = 'CAMPAIGN',
date_from = '2023-01-01,
date_to = '2023-06-30,
time_granularity = 'DAILY',
fields = c(
'pivotValues',
'dateRange',
'clicks',
'impressions',
'dateRange',
'costInUsd',
'oneClickLeads',
'externalWebsiteConversions'
),
facets = list(
accounts = 'urn:li:sponsoredAccount:511009658',
campaigns = "urn:li:sponsoredCampaign:253102116",
campaigns = "urn:li:sponsoredCampaign:229686963"
)
)


В ближайшее время запишу видео урок по работе с пакетом.

#новости_и_релизы_по_R
Вышел httr2 1.0.0

Команда Хедли работала над вторым поколением httr на протяжении последних двух лет, и вчера был официальный релиз стабильной версии httr2.

httr2 является преемником httr.Основное его отличие состоит в том, что у него есть явный объект запроса, который можно создать с помощью нескольких вызовов функций. Это делает интерфейс более естественным для работы в пайпах и в целом упрощает жизнь, поскольку вы можете итеративно создавать сложный запрос. httr2 также основан на 10-летнем опыте разработки пакетов, который мы накопили с момента создания httr, поэтому его использование должно быть более удобным. Если вы в настоящее время являетесь пользователем httr, вам не нужно переходить на него, поскольку мы продолжим поддерживать пакет в течение многих лет, но если вы начинаете новый проект, я бы рекомендовал вам попробовать httr2.

От себя добавлю, что с момента выхода httr2 все свои новые пакеты я уже писал на его основе.

————————————————
Что нового в httr2 1.0.0

В этом выпуске представлены улучшенные инструменты для выполнения нескольких запросов, а также множество исправлений ошибок и незначительных улучшений для OAuth.

Для управления политикой отправки набора запросов в данном релизе добавлены следующие 3 функции:

req_perform_sequential() - берет список запросов и выполняет их по одному.
req_perform_parallel() - берет список запросов и выполняет их параллельно (до 6 одновременно по умолчанию). По смыслу похоже на req_perform_sequential(), но, очевидно, быстрее за счет потенциальной нагрузки на сервер. У него также есть некоторые ограничения: самое главное, он не может обновить токен OAuth с истекшим сроком действия и игнорирует политику обработки ошибок настроенную через`req_retry()` и ограничение скорости отправки запросов через req_throttle().
req_perform_iterative() - принимает один запрос и функцию обратного вызова для генерации следующего запроса из предыдущего ответа. Это будет продолжаться до тех пор, пока функция обратного вызова не вернется NULL или max_reqs не будут выполнены запросы. Это очень полезно для API с поддержкой пагинации, которые сообщают только URL-адрес следующей страницы.

Небольшой пример кода для работы с набором запросов:

# формируем URL для запроса
urls <- paste0("https://swapi.dev/api/people/", 1:10)
# генерируем список объектов запроса
reqs <- lapply(urls, request)
# последовательно отправляем каждый запрос из списка
resps <- req_perform_sequential(reqs)

# функция для парсинга результатов
sw_data <- function(resp) {
tibble::as_tibble(resp_body_json(resp)[1:9])
}
# парсинг результата
resps |> resps_data(sw_data)


● В функцию req_url_query() добавлен аргумент .multi, который позволяет управлять поведением параметра, если вы передаёте в него набор значений в виде вектора:
- .multi = "comma" - разделение значений через запятую
- .multi = "pipe" - разделение значений через |
- .multi = "explode" - создание одного параметра для каждого значения (например a = c(1, 2) конвертируется в ?a=1&a=2)

● Так же у пакета теперь появился официальный логотип, который вы видите на изображении к посту.

Ссылки:
- Прочитать о выпуске httr2 1.0.0 можно по ссылке

Полезные материалы по httr2:
- Начало работы с httr2
- Оборачиваем API с помощью httr2
- Видео урок по созданию пакета обёртки над API с помощью httr2

#новости_и_релизы_по_R
Опубликовал видео воркшопа по анализу показателя качества ключевых слов в Google Ads с помощью пакета rgoogleads

Воркшоп прошел ещё 14 сентября, но у меня только недавно добрались руки до его записи.

Описание:
Воркшоп по работе с Google Ads API с помощью языка R и пакета rgoogleads. В ходе которого мы с нуля разберёмся как пройти авторизацию, запрашивать отчёты из Google Ads, и проанализируем показатель качества ключевых слов рекламного аккаунта.

Тайм коды:
00:00:00 Приветствие
00:01:12 О спикере
00:03:43 Программа воркшопа
00:04:14 Что такое контекстная реклама и сервис Google Ads
00:06:34 Варианты авторизации в пакете rgoogleads
00:07:24 Авторизация в Google Ads с помощью дефолтных параметров пакета rgoogleads
00:10:00 Создание собственных учётных данных для авторизации
00:21:12 Авторизация в Google Ads с помощью собственных учётных данных
00:23:00 Иерархия аккаунтов в Google Ads API
00:24:53 Ограничения при использовании собственных учётных данных
00:25:54 Автоматизация процесса авторизации с помощью переменных среды
00:26:43 Опции пакета rgoogleads
00:27:34 Запрос отчётов из Google Ads API
00:30:49 GAQL QueryBuilder
00:34:52 Пример запроса отчётов из Google Ads API
00:39:54 Аргументы функции gads_get_report()
00:41:13 Загрузка отчётов из Google Ads API в многопоточном режиме
00:44:34 Запрос объектов рекламного кабинета Google Ads
00:45:49 Что такое показатель качества ключевых слов и как проходит аукцион среди рекламодателей в Google Ads
00:47:47 Что влияет на показатель качества ключевых слов Google Ads
00:48:29 На что влияет показатель качества Google Ads
00:49:16 Пример анализа качества ключевых слов
01:03:36 Ответы на вопросы

Организаторы:
- Дмитрий Серебренников
- Kazakhstan Sociology Lab (сайт, инстаграм, LinkedIn, группа в тг)

Ссылки:
- Видео на YouTube
- Страница с материалами воркшопа

#видео_уроки_по_R
Курс "Разработка пакетов на языке R" опубликован на bookdown.org

В начале месяца я упоминал о завершении разработки последнего, 14-го урока курса и о планах опубликовать его на bookdown. Итак, рад сообщить, что курс теперь доступен на указанной платформе.

О курсе:
Что касается содержания курса, он был создан под впечатлением от книги Хедли Викхема и Дженни Брайан "R Packages (2e)". Мой опыт в разработке R-пакетов начался в 2016 году, и, как выяснилось, мои первые шаги были далеко не самыми эффективными. Книга Хедли предоставила современный и эффективный подход к разработке пакетов, что я внедрил в этот курс.

Курс объединяет мой семилетний опыт в создании пакетов с тем, что было представлено Викхемом и Брайан в их книге. У этих авторов есть чему поучиться.

Этот курс будет полезен как тем, кто только начинает свой путь в создании пакетов, так и тем, кто уже обладает опытом, поскольку в нем рассматриваются передовые практики в разработке пакетов. Так, что если вы не пробовали ещё себя в разработке пакета, то самое время попробовать.

Хотя некоторые теоретические главы книги были опущены, вместо них были добавлены уроки по созданию пакетов-обёрток над API с использованием httr2 и gargle.

В целом, я считаю, что курс получился полезным, и надеюсь, что вы также оцените его.

Программа курса:
1. Обзор рабочего процесса разработки пакета
2. Настройка системы и интеграция с GitHub
3. Рекомендации по организации R кода
4. Добавление данных в пакет
5. DESCRIPTION - Метаданные пакета
6. NAMESPACE - Зависимости пакета
7. Разработка юнит-тестов к функциям пакета (пакет testthat)
8. Написание документации к функциям пакета
9. Виньетки и прочая опциональная документация пакета
10. Разработка сайта пакета (пакет pkgdown)
11. Публикация в CRAN
12. Разработка пакета обёртки над API (пакет httr2)
13. Разработка пакета обёртки для Google API (пакет gargle)
14. Как создать коллекцию пакетов

Буду признателен за репосты!

Ссылки:
- Курс на bookdown
- Сайт курса
- Плейлист на YouTube
- Благодарности автору

#курсы_по_R
Время обновить пакеты rfacebookstat и rlinkedinads

1. rfacebookstat - пакет для запроса статистики из рекламных кабинетов Facebook и Instagram

Пакет был переведён на работу с Facebook Marketing API v18.

Пользователям пакета необходимо только установить его новую версию, все скрипты будут работать без каких либо дополнительных изменений.

2. rlinkedinads - пакет для запроса статистики из рекламных кабинетов Linkedon

В rlinkedinads была исправлена ошибка обновления токена. Кроме обновления никаких дополнительных действий не требуется.

#новости_и_релизы_по_R
Релиз bigrquery 1.5.0

Я довольно плотно работаю с BigQuery, соответственно не редко использую для этого пакет bigrquery. Пару дней назад был достаточно важный релиз bigrquery 1.5.0,

Что нового:

Основные изменения:

* Из пакета были исключены все устаревшие функции, т.е. те, названия которых начинаются НЕ с префикса bq_.
* bq_table_download() теперь возвращает в текстовом формате поля, которые в BigQuery хранятся в неизвестном для R типе. Ранее вы получали ошибку при попытке загрузить таблицы с полями которые имели тип BIGNUMERIC или JSON.
* Теперь bigrquery анализирует даты с помощью пакета clock. Это приводит к значительному повышению производительности и гарантирует корректный анализ дат до 1970-01-01.

Изменение в DBI интерфейсе:

* Наборы данных и таблицы bigquery теперь будут отображаться на панели подключений при использовании dbConnect().
* Добавлена поддержка функций dbAppendTable(), dbCreateTable() и dbExecute()
* В dbGetQuery() и dbSendQuery() поддерживают передачу параметров запросов с помощью аргумента params.

Так же ряд менее значительных изменений получил и dbplyr интерфейс, например tbl() теперь работает не только с физическими таблицами, но и с представлениями (View).

Более подробно обо всех изменениях можно почитать на GitHub.

#новости_и_релизы_по_R
Добавляем полезные аннотации к части вызова пакетв в своих скриптах

Принято прописывать команды загрузки пакетов в начале вашего скрипта, обычно это выглядит как-то так:

library(rjira)
library(dplyr)
library(tidyr)
library(snakecase)
library(purrr)
library(stringr)
library(bigrquery)
library(googlesheets4)
library(glue)


Это реальный пример загрузки пакетов в одном из моих скриптов. Пакет annotater добавляет в RStudio Addon, который позволяет добавить описание вызовам пакетов, на данный момент доступно 5 типов аннотаций:

1. Annotate package calls in active file

Добавляет тайтлы пакетов к команде их вызовов. т.е. превратит пример выше в следующий:


library(rjira) # Work with Jira API
library(dplyr) # A Grammar of Data Manipulation
library(tidyr) # Tidy Messy Data
library(snakecase) # Convert Strings into any Case
library(purrr) # Functional Programming Tools
library(stringr) # Simple, Consistent Wrappers for Common String Operations
library(bigrquery) # An Interface to Google's 'BigQuery' 'API'
library(googlesheets4) # Access Google Sheets using the Sheets API V4
library(glue) # Interpreted String Literals


2. Annotate package repository source in active file

Добавляет информацию о репозитории и версии пакета:

library(rjira)         # [github::selesnow/rjira] v0.0.0.9000
library(dplyr) # CRAN v1.1.2
library(tidyr) # CRAN v1.2.1
library(snakecase) # CRAN v0.11.0
library(purrr) # CRAN v0.3.4
library(stringr) # CRAN v1.4.1
library(bigrquery) # CRAN v1.5.0
library(googlesheets4) # CRAN v1.0.1
library(glue) # CRAN v1.6.2


3. Annotate tittles and repository sources in active file

Эта опция добавит одновременно и описание пакета и описание репозитория и его версии

4. Annotate each package's function calls

Пропишет возле вызова пакета список функций. который в текущем скрипте из этого пакета используется.

library(rjira) # jr_get_fields jr_issue_search
library(dplyr) # %>% filter mutate left_join group_by row_number ungroup pull select all_of coalesce any_of where rename_with matches across
library(tidyr) # %>% all_of any_of unnest_wider matches hoist
library(snakecase) # to_snake_case
library(purrr) # %>% map_dfc map
library(stringr) # %>% str_remove
library(bigrquery) # bq_auth bq_dataset bq_dataset_query bq_table bq_table_upload
library(googlesheets4) # gs4_auth range_read %>%
library(glue) # glue_sql


5. Expand metapackages

Разворачивает вызов метапакета, в отдельные вызовы для каждого пакета, который в него входит.

Например вызов library(tidyverse) будет преобразован в:

####
library(ggplot2)
library(tibble)
library(tidyr)
library(readr)
library(purrr)
library(dplyr)
library(stringr)
library(forcats)
library(lubridate)
####


Функционал довольно полезный, особенно если вы планируете разбирать чужой скрипт, в котором используются неизвестные вам пакеты.

Пример работы на изображении к посту.

Ссылка на GitHub пакета annotater.

#заметки_по_R
Как разбить таблицу на части по заданному количеству строк

Иногда вам может потребоваться разбить таблицу на части, либо по количеству строк, либо по значениям какого то поля, в этом вам поможет функция split() из базового R.

Для начала построим тестовую таблицу:

# к-во строк в тестовой таблице
rows_in_table <- 570

# тестовая таблица
df <- data.frame(
row_num = 1:rows_in_table,
numbers = sample(1:9000, size = rows_in_table, replace = T),
letters = sample(letters, size = rows_in_table, replace = T)
)


Теперь разобьём таблицу на части по значению поля letters:

# Разбивка по значению какого либо поля
df_split_by_column <- split(df, df$letters)


$a
# A tibble: 28 x 3
row_num numbers letters
<int> <int> <chr>
1 3 8 a
2 11 2217 a
3 19 1948 a
4 34 338 a
5 54 604 a
6 64 754 a
7 68 3479 a
8 92 3942 a
9 160 7475 a
10 169 2507 a
# i 18 more rows
# i Use `print(n = ...)` to see more rows

$b
# A tibble: 20 x 3
row_num numbers letters
<int> <int> <chr>
1 9 4438 b
2 14 56 b
3 109 6039 b
4 159 1749 b
5 175 8068 b
6 200 7444 b
7 220 1101 b
8 234 2396 b
9 260 3112 b
10 296 7411 b
11 302 4639 b
12 354 7716 b
13 396 4090 b
14 398 1540 b
15 424 6738 b
16 426 728 b
17 441 333 b
18 503 3346 b
19 548 3347 b
20 564 651 b

$c
# A tibble: 17 x 3
row_num numbers letters
<int> <int> <chr>
1 47 1900 c
2 89 8522 c
3 130 6156 c
4 131 246 c
5 148 8591 c
6 151 640 c
7 154 8428 c
8 209 4218 c
9 216 7774 c
10 298 753 c
11 307 8839 c
12 355 5903 c
13 421 5147 c
14 433 2422 c
15 442 3224 c
16 557 4346 c
17 562 8635 c

...


Так же мы можем разбить таблицу на части по заданному количеству строк:

# Разбивка по заданному количеству строк
chunk <- 100 # размер одной части в к-ве строк
n <- nrow(df) # вычисляем к-во строк исходной таблицы
r <- rep(1:ceiling(n/chunk),each=chunk)[1:n] # определяем каждую строку в определённую часть таблицы
df_split_by_100_rows <- split(df,r) # Разбиваем таблицу


$`1`
row_num numbers letters
1 1 1210 h
2 2 5087 y
3 3 81 y
4 4 5459 a
5 5 5665 j
6 6 3735 v
7 7 4309 p
8 8 3858 i
9 9 847 x
10 10 91 e
11 11 3859 k

...


#заметки_по_R
HTML Embed Code:
2024/03/29 07:31:53
Back to Top