Skip to content
Snippets Groups Projects

complete tutorial and live demo

Merged Joseph Tran requested to merge dev into main
1 file
+ 213
1
Compare changes
  • Side-by-side
  • Inline
+ 213
1
@@ -76,7 +76,7 @@ function(input, output, session) {
Il s'agit maintenant de remplir le fichier server.R pour obtenir des résultats dans les tabPanel "Plot", "Summary" et "Table".
### Générer un tableau dynamique avec reactive({})
### Générer un tableau dynamique dans une fonction reactive({})
Créer une reactive avec reactive({}) pour générer un tableau dynamique récupérant les 2 colonnes correspondant aux variables X et Y sélectionnées par l’utilisateur sur les données iris et ranger ce tableau dans une variable « selectedData »
@@ -96,3 +96,215 @@ function(input, output, session) {
}
```
### Générer le clustering k-means dasn une fonction reactive({})
Créer une reactive avec reactive({}) pour générer un cluster sur le tableau dynamique précédent, utilisant la variable « Cluster count » comme nombre de clusters à créer et ranger ce résultat dans une variable « clusters ». Utiliser la fonction kmeans() pour générer ces clusters.
```{r server_R_clusters, exercise=TRUE}
function(input, output, session) {
}
```
```{r server_R_clusters-solution}
function(input, output, session) {
# Combine the selected variables into a new data frame
selectedData <- reactive({
iris[, c(input$xcol, input$ycol)]
})
clusters <- reactive({
kmeans(selectedData(), input$clusters)
})
}
```
### Générer le plot dynamique du clustering kmeans
Générer un graphique dynamique avec renderPlot{()} représentant le tableau dynamique avec la fonction plot() et colorer les points selon le cluster auquel ils appartiennent avec le paramètre « col ». Pour récupérer les clusters depuis la variable « clusters », utiliser clusters()\$cluster. Ranger le résultat dans output\$plot1 et le représenter côté UI dans le tabPanel « Plot ».
```{r server_R_render_plot, exercise=TRUE}
function(input, output, session) {
}
```
```{r server_R_render_plot-solution}
function(input, output, session) {
# Combine the selected variables into a new data frame
selectedData <- reactive({
iris[, c(input$xcol, input$ycol)]
})
clusters <- reactive({
kmeans(selectedData(), input$clusters)
})
output$plot1 <- renderPlot({
palette(c("#E41A1C", "#377EB8", "#4DAF4A", "#984EA3",
"#FF7F00", "#FFFF33", "#A65628", "#F781BF", "#999999"))
par(mar = c(5.1, 4.1, 0, 1))
plot(selectedData(),
col = clusters()$cluster,
pch = 20, cex = 3)
points(clusters()$centers, pch = 4, cex = 4, lwd = 4)
})
}
```
### Générer un résumé statistique du tableau dynamique
Générer un texte dynamique avec renderPrint({}) représentant un résumé statistique du tableau dynamique généré précédemment avec la fonction summary() et ranger le résultat dans output$summary, puis le représenter côté UI dans le tabPanel « Summary ».
```{r server_R_render_print, exercise=TRUE}
function(input, output, session) {
}
```
```{r server_R_render_print-solution}
function(input, output, session) {
# Combine the selected variables into a new data frame
selectedData <- reactive({
iris[, c(input$xcol, input$ycol)]
})
clusters <- reactive({
kmeans(selectedData(), input$clusters)
})
output$plot1 <- renderPlot({
palette(c("#E41A1C", "#377EB8", "#4DAF4A", "#984EA3",
"#FF7F00", "#FFFF33", "#A65628", "#F781BF", "#999999"))
par(mar = c(5.1, 4.1, 0, 1))
plot(selectedData(),
col = clusters()$cluster,
pch = 20, cex = 3)
points(clusters()$centers, pch = 4, cex = 4, lwd = 4)
})
# Generate a summary of the data ----
output$summary <- renderPrint({
summary(selectedData())
})
}
```
### Générer un tableau des données sélectionnées pour le graphique
Afficher le tableau dynamique avec renderTable{()} représentant le tableau utilisé pour générer le graphique et ranger le résultat dans output$table. Représenter cette table côté UI dans le tabPanel « Table ».
```{r server_R_render_table, exercise=TRUE}
function(input, output, session) {
}
```
```{r server_R_render_table-solution}
function(input, output, session) {
# Combine the selected variables into a new data frame
selectedData <- reactive({
iris[, c(input$xcol, input$ycol)]
})
clusters <- reactive({
kmeans(selectedData(), input$clusters)
})
output$plot1 <- renderPlot({
palette(c("#E41A1C", "#377EB8", "#4DAF4A", "#984EA3",
"#FF7F00", "#FFFF33", "#A65628", "#F781BF", "#999999"))
par(mar = c(5.1, 4.1, 0, 1))
plot(selectedData(),
col = clusters()$cluster,
pch = 20, cex = 3)
points(clusters()$centers, pch = 4, cex = 4, lwd = 4)
})
# Generate a summary of the data ----
output$summary <- renderPrint({
summary(selectedData())
})
output$table <- renderTable({
selectedData()
})
}
```
## Application Shiny complète
### Lancer une application Shiny
Tips, commande pour lancer une application Shiny dans le dossier contenant les fichiers ui.R et server.R. Avec "." le chemin vers le dossier contenant les deux scripts.
```{r shiny_run_app, exercise=FALSE, eval=FALSE}
shiny::runApp(".")
```
### L'application shiny en démo live
Si vous avez exécuter la commande ``shiny::runApp(".")`` dans la console, vous pouvez voir l'application en démo live ci-dessous.
```{r shiny_run_app_demo, echo=FALSE}
# k-means only works with numerical variables,
# so don't give the user the option to select
# a categorical variable
vars <- setdiff(names(iris), "Species")
pageWithSidebar(
headerPanel('Iris k-means clustering'),
sidebarPanel(
selectInput('xcol', 'X Variable', vars),
selectInput('ycol', 'Y Variable', vars, selected = vars[[2]]),
numericInput('clusters', 'Cluster count', 3, min = 1, max = 9)
),
mainPanel(
tabsetPanel(type = "tabs",
tabPanel("Plot", plotOutput('plot1')),
tabPanel("Summary", verbatimTextOutput("summary")),
tabPanel("Table", tableOutput("table"))
)
)
)
```
```{r shiny_run_app_demo_server, context="server"}
# Combine the selected variables into a new data frame
selectedData <- reactive({
iris[, c(input$xcol, input$ycol)]
})
clusters <- reactive({
kmeans(selectedData(), input$clusters)
})
output$plot1 <- renderPlot({
palette(c("#E41A1C", "#377EB8", "#4DAF4A", "#984EA3",
"#FF7F00", "#FFFF33", "#A65628", "#F781BF", "#999999"))
par(mar = c(5.1, 4.1, 0, 1))
plot(selectedData(),
col = clusters()$cluster,
pch = 20, cex = 3)
points(clusters()$centers, pch = 4, cex = 4, lwd = 4)
})
# Generate a summary of the data ----
output$summary <- renderPrint({
summary(selectedData())
})
output$table <- renderTable({
selectedData()
})
```
Loading