je travaille à la création d'une application shiny sont la structure est assez répétitive. Je souhaiterais modulariser certains bouts d'application (mais pas la totalité)
Voici un exemple générique, qui est le tracé d'un histogramme. Le choix de la variable à tracer (selectInput) doit être commune aux 2 graphiques. Le choix du nombre de bin et de la couleur du tracé ont été modularisés.
module histogramUI
Code : Tout sélectionner
histogramUI <- function(id) {
tagList(
numericInput(NS(id, "bins"), "bins", value = 10, min = 1),
plotOutput(NS(id, "hist"))
)
}
et son server histogramServer
Code : Tout sélectionner
histogramServer <- function(id,color) {
moduleServer(id, function(input, output, session) {
data <- reactive(mtcars[[input$var]])
output$hist <- renderPlot({
hist(data(), breaks = input$bins, main = input$var,col=color)
}, res = 96)
})
}
et le code ci dessous de l'application :
Code : Tout sélectionner
ui <- fluidPage(
selectInput("var", "Variable", choices = names(mtcars)),
histogramUI("hist1"),
histogramUI("hist2"),
)
server <- function(input, output, session) {
histogramServer("hist1","blue")
histogramServer("hist2","red")
}
shinyApp(ui, server)
le code tel quel ne fonctionne pas, la valeur reactive input$var n'est visiblement pas prise en compte dans le module, l'erreur est la suivante :
Code : Tout sélectionner
Error in .subset2: attempt to select less than one element in get1index
Que faudrait il faire ?
en vous remerciant d'avance de votre aide,