¿Cómo convertir una aplicación Shiny que consta de varios archivos en un ejemplo Shiny fácilmente reproducible y compartible?

Resuelto Florian asked hace 54 años • 1 respuestas

Hay recursos sobre cómo crear un ejemplo mínimo, completo y verificable en general en Stack Overflow y sobre cómo crear un excelente ejemplo reproducible en R. Sin embargo, no existen pautas similares parabrillantepreguntas, mientras que el cumplimiento de ciertos estándares hace que sea mucho más probable que se den respuestas de calidad y, por lo tanto, que su pregunta se resuelva.

Sin embargo, hacer una buena pregunta sobre Shiny puede resultar complicado.brillanteLas aplicaciones suelen ser grandes y complejas, utilizan múltiples fuentes de datos y el código suele dividirse en varios archivos, lo que dificulta compartir código fácilmente reproducible con otros. Aunque puede haber un problema en server.R, el ejemplo no es reproducible sin el contenido de ui.R(y posiblemente otros archivos como hojas de estilo o global.R). Copiar y pegar el contenido de todos estos archivos individualmente es engorroso y requiere que otros usuarios vuelvan a crear la misma estructura de archivos para poder reproducir el problema.

Entonces; cómo convertir tubrillanteaplicación en un buen ejemplo reproducible?

Florian avatar Jan 01 '70 08:01 Florian
Aceptado

Datos de ejemplo

Por supuesto, todas las pautas con respecto a los datos de muestra mencionadas en la respuesta a la pregunta "cómo hacer un excelente ejemplo reproducible de R" también son válidas al crear preguntas relacionadas con Shiny. Para resumir: asegúrese de que no se necesiten archivos adicionales para ejecutar su código. Utilice conjuntos de datos de muestra como mtcarso cree algunos datos de muestra con data.frame(). Si sus datos son muy complejos y esa complejidad es realmente necesaria para ilustrar el problema, también puede utilizar dput(). Evite el uso de funciones como read.csv(), a menos que, por supuesto, tenga preguntas relacionadas con funciones como fileInput.

Código de ejemplo

Reduzca siempre su código al mínimo indispensable para reproducir su error o comportamiento inesperado. Esto incluye eliminar llamadas a .CSSarchivos y .jsarchivos adicionales y eliminar funciones innecesarias en uiy server.

Las aplicaciones brillantes suelen constar de dos o tres archivos ( ui.Ry server.Rposiblemente global.R), por ejemplo esta aplicación de demostración . Sin embargo, es preferible publicar su código como un único script, para que otras personas puedan ejecutarlo fácilmente sin tener que crear esos archivos manualmente. Esto se puede hacer fácilmente mediante:

  • envolviendo su interfaz de usuario con ui <- fluidPage(…),
  • el servidor con server <- function(input,output, session) {…},
  • y posteriormente llamando shinyApp(ui, server).

Entonces, un esqueleto simple para empezar podría verse así:

library(shiny)

ui <- fluidPage(

  )

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

}

shinyApp(ui, server)

Ejemplo de trabajo

Entonces, teniendo en cuenta todo lo anterior, un buen ejemplo mínimo, completo y verificable para una aplicación Shiny podría verse así:

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)

Agregar CSS

Hay varias formas de agregar CSS personalizado a una aplicación Shiny, como se explica aquí . La forma preferida de agregar CSS a una aplicación Shiny en un ejemplo reproducible es agregar CSS en el código, en lugar de en un archivo separado. Esto se puede hacer agregando una línea en el uiarchivo de una aplicación, por ejemplo de la siguiente manera:

tags$head(tags$style(HTML('body {background-color: lightblue;}'))),
Florian avatar Jan 19 '2018 14:01 Florian