Маленький рецепт, который будет полезен при создании динамических отчетов.
Достаточно часто встречается ситуация, когда размер и содержание отчетной формы будет зависеть от состава переданных на вход данных. Речь идет именно о story-telling отчете, а не о простом выводе таблицы. В этом случае, в зависимости от содержания входных данных, могут появляться или исчезать отдельные пункты, графики, таблицы, текст.
Что будет делать классический Excel-Word аналитик? Под каждый новый запрос делать кастомный отчет и сохранять его в отдельный файл. Но можно заглянуть немного под капот и заставить компьютер делать все самостоятельно.
R Markdown позволяет все это выполнить в элегантной форме. Некоторые технические детали ниже.
Основная идея
У нас есть данные, содержание которых может меняться. Например, надо строить отчет по машинам, развозящим грузы (пример абстрактный). Количество и номера машин, выходящих в рейс, каждый день разные, но сводка по каждой машине по своей структуре одинакова. Будем отталкиваться от этого.
R Markdown выполняется в несколько проходов. При этом из
Rmd
сначала формируется .md
, а потом из
него формируется выходное представление, наиболее часто используеся
html.
Намечаются 2 варианта.
- Можно динамически вставить в
.Rmd
нужные блоки (собранные или шаблонизированные). - Можно динамически вставить в
.md
нужные markdown вставки.
Реализация
Ниже просто пример кода, который каждый желающий может запустить у себя на машине. Он охватывает реализации обоих примеров и минимален, чтобы передать суть.
- Динамически вставляем гиперссылки, получаемые из внешнего источника.
- Динамически формируем разделы документов на основании данных.
Исходный код и Результирующий отчет
Ссылки
Вот ещё полезная информация на эту тему:
- Advanced R. 21 Translating R code
- R Markdown: The Definitive Guide. 2.6 R code chunks and inline R code
P.S. Для сомневающихся этот пример является неплохой аргументацией, почему имеет смысл посмотреть в сторону R.
Предыдущая публикация Медианы выборок. Доверительные интервалы и сравнение.