Автор канала Алексей Селезнёв, руководитель отдела аналитики в Netpeak, автор R пакетов: ryandexdirect, rfacebookstat и др. В канале публикуются статьи, доклады, новости, заметки по языку R.
fun(), то в ходе сеанса fun() будет использовать из pack2, т.к. он был подключён последним.
Такое поведение логично, но не всегда удобно. поэтому есть несколько способов управлять политикой приоритетности функций между пакетами, сейчас мы рассмотрим несколько таких вариантов.
Пакет conflicted позволяет установить приоритет с помощью функции conflict_prefer():
library(conflicted)
library(dplyr)
conflict_prefer("filter", "dplyr")
Посмотреть существующие конфликты текущей сессии можно так:
conflict_scout() #> 2 conflicts: #> * `filter`: [dplyr] #> * `lag` : dplyr, statsБолее гибкую возможность управления конфликтами предоставляет пакет
modules, он создаёт отдельное окружение под каждый пакет, этот подход очень похож на то, как происходит импорт пакетов в python:
dplyr <- modules::import_package('dplyr')
dplyr$filter(mtcars, cyl == 8)
Пакет import ожидает, что вы явно присвоите новые имена конфликтным функциям:
import::from(dplyr, select, arrange, dplyr_filter = filter) dplyr_filter(mtcars, cyl == 8)В базовом синтаксисе для управление приоритетами можно использовать опцию
conflicts.policy или функцию conflictRules():
options(conflicts.policy =
list(error = TRUE,
generics.ok = TRUE,
can.mask = c("base", "methods", "utils",
"grDevices", "graphics",
"stats"),
depends.ok = TRUE))
Где:
● error - Если TRUE, то конфликты приводят к ошибкам;
● generics.ok - Если установлено, то определяет, считается ли маскирование обобщённых (дженерик) функций S4 конфликтом. По умолчанию - FALSE, строгая проверка - TRUE;
● can.mask - Вектор имен пакетов, которые разрешено маскировать без возникновения ошибки;
● depends.ok - Если TRUE, то разрешить все конфликты, возникающие при загрузке пакета;
● warn - Устанавливает значение по умолчанию для аргумента warn.conflicts в library() и require().
#заметки_по_Rggimage для флагов после получения кодов iso2c из названий стран с помощью countrycode.
2. Для заполнения полосы позади каждой страны градиентной заливкой был создан прямоугольник с помощью grid, функция linearGradient() была использована для заливки. Затем с помощью функцию geom_grob() из ggpp был изменён размер прямоугольников.
3. Подсветка фона была сделана с помощью круга, на этот раз заполненного с помощью radiusGradient(). Я снова использовал функцию geom_grob(), чтобы поместить их в две разные позиции с разными размерами.
4. Последнее, что я хотел исправить, это флаги Швейцарии и Бельгии, выбивающиеся из фоновых полос. Я думал изменить соотношение сторон или размер этих двух флагов в geom_image(), но это либо исказило бы их, либо сделало бы их слишком маленькими. Поэтому я решил замаскировать флаги. Используя для этого with_mask() из ggfx.
Результат работы вы видите на изображении к этому посту.
Ссылки:
- Код для построение табло на GitHub.
- Репозиторий с кодом и изображением
- Статья на блоге автора с пошаговым описание (использовалось в посте)
- Ссылка на твит автора, так же с пошаговым описанием построения.
- Описание задания TidyTuesday
#заметки_по_Rggplot2.
#видео_уроки_по_Rggplot2, и построению всех основных типов графиков с его помощью, очень рекомендую закинуть в закладки.
Содержание:
● Основные понятия и философия пакета
● Виды графиков
● Диаграмма рассеяния (scatter plot)
● Пузырьковая диаграмма (bubble plot)
● Столбчатая диаграмма (bar plot)
● Столбчатая диаграмма с накоплением
● Сгруппированная столбчатая диаграмма
● Lolipop chart
● Графики распределения
● Гистограмма (histogram)
● График плотности распределения (density plot)
● Ящик с усами и его вариации
● Линейный график (line graph)
● График области (area graph)
● Потоковый график
● Тепловая карта (heatmap)
● Матрица корреляции
#статьи_по_Rdplyr один из наиболее популярных пакетов для языка R, основным преимуществом которого является удобочитаемый и понятный синтаксис.
Из недостатков данного пакета можно отметить, что при работе с данными большого объёма он значительно уступает в скорости вычислений например data.table.
В этом видео мы разберёмся как можно ускорить вычисления на dplyr, за счёт бекендов dtplyr и multidplyr, а так же узнаем о том, как и зачем можно использовать бекенд dbplyr, предназначенный для работы с базами данных с использованием синтаксиса dplyr.
Тайм коды:
00:00 Вступление
00:59 Какие бекенды мы рассмотрим
01:48 Цель dtplyr
02:30 Синтаксис dtplyr
03:33 Пример работы с dtplyr
05:38 Как осуществляется перевод глаголов dplyr в синтаксис data.table
07:51 Функция show_query()
11:27 Почему dtplyr медленнее чем data,table
13:24 Цель dbplyr
13:40 Синтаксис dbplyr
14:37 Пример работы с dbplyr
16:54 Перевод dplyr глаголов в SQL запросы
17:53 Как реализованы подзапросы в dbplyr
18:25 Перевод неизвестных R функций и инфиксных операторов в SQL запрос
19:48 Проброс SQL команд в запросы
20:15 Как происходит перевод функций внутри dplyr глаголов в SQL запросы, функция translate_sql()
21:26 Введение в multidplyr
22:17 Варианты применения multidplyr
22:50 Пример работы с multidplyr
28:24 Какой пакет использовать dtplyr или multidplyr
29:27 Заключение
Ссылка на конспект к уроку + видео.
Подписывайтесь также на YouTube канал!
Смотрите другие посты по теме:
- Программирование с dplyr
- Видео курс "Введение в dplyr 1.0.0"
#видео_уроки_по_Rggrepel позволяет вам избежать перекрытия текстовых меток на графиках при работе с ggplot2. При использовании слоёв ggrepl тестовые метки отталкиваются друг от друга, от точек данных и от краев области построения.
Пакет предоставляет вам дополнительно 2 слоя:
● geom_text_repel() - распределяет текстовые метки так, что бы они не накладывались друг на друга, и не выходили за пределы графика.
● geom_label_repel() - помещает текстовые метки в прямоугольники, повышая их читаемость, и следит за их расположением аналогично geom_text_repel().
Следующий пример хорошо иллюстрирует разницу между обычным geom_text() и geom_text_repel().
library(ggrepel) set.seed(42) dat <- subset(mtcars, wt > 2.75 & wt < 3.45) dat$car <- rownames(dat) p <- ggplot(dat, aes(wt, mpg, label = car)) + geom_point(color = "red") p1 <- p + geom_text() + labs(title = "geom_text()") p2 <- p + geom_text_repel() + labs(title = "geom_text_repel()") gridExtra::grid.arrange(p1, p2, ncol = 2)Предоставляемые пакетом
ggrepel слои под капотом основаны на встроенных в ggplot2 geom_text и geom_label. Но были доработаны таким образом, что бы при изменении масштаба графика, положение меток так же изменялось.
Ссылки:
- пример кода взят из официальной документации ggrepel
Смотрите другие посты по теме:
- Обращаемся к ggplot2 на естественном языке
- Как добавить ярлыки данных в ggplot2
#заметки_по_Rrows_*(), которые несправедливо обделены вниманием пользователей. Если вы не знаете об этом семействе функций, можете посмотреть этот видео урок из курса "Введение в dplyr 1.0.0".
Что нового:
● Новая функция rows_append() работает аналогично функции rows_insert(), но при этом игнорирует ключи, и не изменяет тип объекта на выходе.
● Функции rows_*() больше не требуют, что бы значения ключей однозначно идентифицировали каждую строку.
● В функцию rows_insert() добавлен аргумент conflict, позволяющий более гибко контролировать строки в таблице y с ключами, которые конфликтуют с ключами в таблице x. Конфликт возникает, если ключ таблицы y уже существует в таблице x. По умолчанию конфликт приводит к ошибке, но теперь вы можете использовать "ignore". Такое поведение схоже с SQL командой ON CONFLICT DO NOTHING.
● rows_update(), rows_patch(), и rows_delete() получили аргумент unmatched, который позволяет игнорировать конфликт строк в y с ключами, которые не совпадают
с ключами в x.
● rows_delete() больше не требует, чтобы столбцы y были строгим подмножеством
столбцов x, теперь это правило касается только столбцов, перечисленных в by.
● Теперь функции rows_*() всегда сохраняют типы столбцов указанных в таблице x. Это
поведение было задокументировано, но ранее применялось неправильно.
#новости_и_релизы_R