Как преобразовать Блестящее приложение, состоящее из нескольких файлов, в легкодоступный и воспроизводимый пример Shiny?

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

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

Итак, как преобразовать shiny приложение в хорошее воспроизводимый пример?

Ответ 1

Пример данных

Конечно, все руководящие принципы, касающиеся выборочных данных, упомянутых в ответе на вопрос "как сделать отличный воспроизводимый пример R", также соблюдаются при создании вопросов, связанных с Shiny. Подводя итог: убедитесь, что для запуска кода не требуются дополнительные файлы. Используйте примеры наборов данных, таких как mtcars, или создайте несколько примеров данных с помощью data.frame(). Если ваши данные очень сложны и эта сложность действительно необходима для иллюстрации проблемы, вы также можете использовать dput(). Избегайте использования таких функций, как read.csv(), если, конечно, у вас нет вопросов, связанных с такими функциями, как fileInput.

Пример кода

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

Блестящие приложения часто состоят из двух или трех файлов (ui.R, server.R и, возможно, global.R), например, это демонстрационное приложение. Тем не менее, желательно размещать ваш код в виде одного скрипта, чтобы другие могли легко его запустить, не создавая эти файлы вручную. Это легко сделать:

  • обертывание вашего интерфейса с помощью ui <- fluidPage(…),
  • сервер с server <- function(input,output, session) {…},
  • и впоследствии вызывая shinyApp(ui, server).

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

library(shiny)

ui <- fluidPage(

  )

server <- function(input,output,session) {

}

shinyApp(ui, server)

Рабочий пример

Таким образом, принимая во внимание все вышесказанное, хороший пример Minimal, Complete и Verifiable для Shiny-приложения может выглядеть следующим образом:

library(shiny)

df <- data.frame(id = letters[1:10], value = seq(1,10))

ui <- fluidPage(
  sliderInput('nrow', 'Number of rows', min = 1, max = 10, value = 5),
  dataTableOutput('my_table')
  )

server <- function(input, output, session) {
  output$my_table <- renderDataTable({
    df[1:input$nrow,]
  })
}

shinyApp(ui, server)

Добавление CSS

Есть несколько способов добавить пользовательский CSS в приложение Shiny, как описано здесь. Предпочтительный способ добавить CSS в приложение Shiny в воспроизводимом примере - это добавить CSS в код, а не в отдельный файл. Это можно сделать, добавив строку в пользовательском ui приложения, например, следующим образом:

tags$head(tags$style(HTML('body {background-color: lightblue;}'))),