Упрощенные методы обхода блокировщиков и экономии времени при создании приложений RShiny

С момента появления RStudioв конце 2011 года Rshiny широко используется для создания информационных панелей и приложений с поддержкой R и развертыванием через Интернет. Встраивание функций CSS и Javascripts в приложения Rshiny теперь возможно с помощью специальных пакетов, целью которых является улучшение интерактивности и предоставление динамического интерфейса. Уже более 3 лет я занимаюсь созданием и развертыванием приложений Rshiny, поэтому в этом блоге я расскажу о некоторых препятствиях и о том, как их преодолеть с помощью простых советов при создании продукта.

Для начала позвольте мне дать краткий обзор препятствий, с которыми может столкнуться блестящий программист-новичок/средний уровень при разработке приложения.

1. Время, потраченное на дизайн

Эстетика важнее всего, как говорится — «Многие вещи, которые сложно спроектировать, легко реализовать» — Сэмюэл Джонсон.

В то время как ShinyDashboard и ShinyDashboardPlus предоставляют шаблоны для разработки панели мониторинга, им, как правило, не хватает динамического пользовательского интерфейса. Например, модальные окна Bootstrap не работают при использовании страницы shinydashboard. Чтобы преодолеть это, необходимо спроектировать информационную панель с использованием страницы Bootstrap, но в этом случае вы теряете навыки проектирования, поскольку вам нужно перестраивать ее с нуля, а для этого требуется много исследований, в которых используется почти 30-40 % от общего времени. Для новичка, который только начал разрабатывать приложение с помощью RShiny, это может показаться затянутым.

2. Нехватка времени на тестирование — сборка и тестирование заново

Хотя кажется, что приложение готово к работе, внезапно в демо-версии ваше приложение моросит, что указывает на ошибку на консоли. Эта ошибка может быть связана с нелогичной обработкой данных или операцией с подмножеством, которая возвращает нулевые записи, а иногда не указывает, где произошла ошибка. Пока вы исправляете код и запускаете инструмент снова, вы видите ошибку, о которой раньше не позаботились. Это происходит и со мной.

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

3. Импровизируйте…адаптируйтесь…преодолевайте трудности

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

Объяснив проблемы, давайте теперь сосредоточимся на том, как их решать.

1. Всегда соблюдайте SDLC {жизненный цикл разработки программного обеспечения}.

Создание приложения RShiny — это проект, и в каждом проекте есть этапы. Хотя большинство из нас знает о SDLC, мы меньше намерены его реализовывать. Большая часть времени уходит на проектирование, не оставляя времени на тестирование и интеграцию.

Наличие предопределенного SDLC не только помогает в разработке программного обеспечения, но также помогает отслеживать, сколько времени мы тратим на каждый из этапов.

Вот один из подходов, который я использую перед началом проекта:

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

2. Сроки и распределение рабочей нагрузки

Хотя поначалу создание блестящих приложений кажется простым делом, требуется много усилий, чтобы интегрировать серверную часть с интерфейсной частью. Если вы устанавливаете крайние сроки для развертывания, убедитесь, что:

— Имейте в виду тест-кейсы для решения.

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

— Разделяйте коды на модули и соответственно распределяйте пропускную способность, если количество страниц увеличивается. Например, внешний и внутренний код одной страницы будут храниться как отдельные R-скрипты, которые будут импортированы с помощью исходной команды в Server.R и UI.R. Итак, если у вас есть команда, работающая над созданием приложения, каждого человека можно использовать для создания отдельного модуля для работы, который можно интегрировать позже. Более подробная информация об этом указана здесь

— Если нужно интегрировать с бэкендом много данных, попробуйте разбить код на три части, а именно. global.R, Server.R и UI.R, где в global.R будут содержаться только начальные операции выборки данных и очистки данных.

— Если импорт и очистка данных занимают много времени, попробуйте сохранить исходную рабочую среду после запуска global.R в виде образа рабочей области (.RData). , чтобы в дальнейшем время, необходимое для его импорта, было сокращено, а сэкономленное время можно было использовать для улучшения пользовательского интерфейса.

3. Быстрое ознакомление с полезными ресурсами

Многие концепции появятся в качестве нового блендера при разработке блестящих приложений. Следовательно, поиск нужного ресурса за короткий промежуток времени окажется полезным. Помимо поиска решений по Stack-overflow, вот несколько ресурсов, которые я с нетерпением жду при работе над RShiny.

  • https://www.showmeshiny.com — замечательный веб-сайт с галереей блестящих приложений, размещенных для справки с исходным кодом и живой демонстрацией. Если вы тот, кто хочет просмотреть некоторые шаблоны перед проектированием каркаса, это подходящее место для вас.
  • https://deanattali.com/blog/advanced-shiny-tips/
  • https://github.com/grabear/awesome-rshiny
  • https://github.com/FrissAnalytics/shinyJsTutorials
  • Изучите CRAN. Разрабатывается множество пакетов, упрощающих разработку пользовательского интерфейса в Shiny, и вы можете найти множество пакетов, способствующих этому.
  • Спросите на GitHub если вы не получили то, что искали, попробуйте найти проблему на GitHub, если она недоступна, опубликуйте ее в соответствующих проблемах репозитория, чтобы автор мог попытаться решить Это. Например, вопросы, касающиеся Javascripts, можно помещать в shinyjs в репозиторий вопросов.

Конечные примечания

Итак, зная лазейки с рекомендациями и применив их в своем проекте RShiny, я надеюсь, что это поможет вам сэкономить достаточно времени.

Забегая вперед, я поделюсь несколькими советами по R и функциями Rshiny, которые помогут вам плавно и эффективно создавать приложения Rshiny.