Shiny - TP1 : Proposition de solution
library(shiny)
shinyUI(fluidPage(
h1("Première application"),
tabsetPanel(
tabPanel("Contenu du TP",
h2("Contenu du TP"),
sidebarLayout(
sidebarPanel(
selectInput("choixNuage", "Abscisse", c("wt", "hp", "disp")),
textOutput("resumeMpg"),
textOutput("resumeVar")
),
mainPanel(
plotOutput("nuage")
)
)
),
tabPanel("Qualitative seule",
h2("Description d'une variable qualitative"),
sidebarLayout(
sidebarPanel(
selectInput("choixQualiSeule", "Var. qualitative", c("cyl", "vs", "am", "gear", "carb"))
),
mainPanel(
plotOutput("barplotQualiSeule"),
plotOutput("pieQualiSeule"),
dataTableOutput("resumeVarQualiSeule")
)
)
),
tabPanel("Deux qualitatives",
h2("Croisement de deux variables qualitatives"),
sidebarLayout(
sidebarPanel(
selectInput("choixQualiQuali1", "Var. qualitative", c("cyl", "vs", "am", "gear", "carb")),
selectInput("choixQualiQuali2", "Var. qualitative", c("cyl", "vs", "am", "gear", "carb"))
),
mainPanel(
plotOutput("barplotQualiQuali"),
tableOutput("resumeVarQualiQuali")
)
)
)
)
))library(shiny)
shinyServer(function(input, output) {
# Exercices du TP
output$nuage <- renderPlot({
plot(mtcars$mpg ~ mtcars[,input$choixNuage], main = "Consommation")
})
output$resumeMpg <- renderText({
paste("Moyenne mpg :", mean(mtcars$mpg, na.rm = T))
})
output$resumeVar <- renderText({
paste("Moyenne", input$choixNuage, ":", mean(mtcars[,input$choixNuage], na.rm = T))
})
# Qualitative seule
tabQualiSeule <- reactive({
table(mtcars[,input$choixQualiSeule])
})
output$barplotQualiSeule <- renderPlot({
barplot(tabQualiSeule())
})
output$pieQualiSeule <- renderPlot({
pie(tabQualiSeule())
})
output$resumeVarQualiSeule <- renderDataTable({
eff = tabQualiSeule()
prop = prop.table(eff) * 100
cbind(Modalité = names(eff), Effectif = eff, Fréquence = prop, "Fréquence cumulée" = cumsum(prop))
}, options = list(searching = FALSE, paging = FALSE, ordering = FALSE))
# Deux Qualitatives
tabQualiQuali <- reactive({
table(mtcars[,input$choixQualiQuali1], mtcars[,input$choixQualiQuali2])
})
output$barplotQualiQuali <- renderPlot({
barplot(prop.table(tabQualiQuali(), margin = 2))
})
output$resumeVarQualiQuali <- renderTable({
t = tabQualiQuali()
tRow = apply(t, 1, sum)
tCol = apply(t, 2, sum)
tAll = sum(t)
tt = rbind(
cbind(t, tRow),
c(tCol, tAll)
)
colnames(tt) = c(colnames(t), "Somme en lignes")
rownames(tt) = c(rownames(t), "Somme en colonnes")
tt
})
})