¿Cómo convertir una aplicación Shiny que consta de varios archivos en un ejemplo Shiny fácilmente reproducible y compartible?
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?
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 mtcars
o 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 .CSS
archivos y .js
archivos adicionales y eliminar funciones innecesarias en ui
y server
.
Las aplicaciones brillantes suelen constar de dos o tres archivos ( ui.R
y server.R
posiblemente 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 ui
archivo de una aplicación, por ejemplo de la siguiente manera:
tags$head(tags$style(HTML('body {background-color: lightblue;}'))),