Importer un fichier texte (serveur)
Après que l’utilisateur a sélectionné un fichier, celui-ci est téléversé sur l’ordinateur qui exécute l’application Shiny et devient disponible côté serveur.
Si l’ID du champ de fichier est « myfile », vous pourriez vous attendre à ce que input$myfile vous donne accès au fichier téléversé, mais ce n’est pas ainsi que fonctionnent les entrées de type fichier. input$myfile renvoie un data.frame contenant quelques métadonnées sur le fichier sélectionné, dont la principale à prendre en compte est datapath. En supposant que l’ID du champ soit « myfile », input$myfile$datapath sera le chemin où se trouve le fichier.
Après avoir récupéré le chemin du fichier téléversé (par exemple C:\Users\Dean\AppData\Local\Temp\path\to\file.txt), vous pouvez utiliser ce chemin pour lire le fichier comme vous le souhaitez. Vous pouvez utiliser read.csv() si le fichier téléversé est un CSV, readLines() si vous voulez simplement lire toutes les lignes du fichier, ou toute autre fonction qui accepte un chemin de fichier.
Cet exercice fait partie du cours
Études de cas : créer des applications web avec Shiny en R
Instructions
Votre tâche consiste à utiliser le texte du fichier téléversé comme source de données pour le nuage de mots. Plus précisément :
- Définissez une variable réactive nommée
input_filequi contiendra le texte du fichier téléversé (ligne 19).- En utilisant le chemin du fichier téléversé, lisez le texte avec la fonction
readLines()(ligne 24).
- En utilisant le chemin du fichier téléversé, lisez le texte avec la fonction
- Utilisez la variable réactive
input_file()comme paramètredatade la fonction de nuage de mots (ligne 29).
Pour tester l’import de fichier, vous pouvez créer n’importe quel fichier texte sur votre ordinateur et l’importer dans l’application. Vous pouvez aussi utiliser ce fichier (enregistrez-le comme fichier texte sur votre ordinateur) pour tester la fonction de nuage de mots avec le texte du discours « I Have a Dream » de Martin Luther King Jr.
Exercice interactif pratique
Essayez cet exercice en complétant cet exemple de code.
ui <- fluidPage(
h1("Word Cloud"),
sidebarLayout(
sidebarPanel(
textAreaInput("text", "Enter text", rows = 7),
fileInput("file", "Select a file"),
numericInput("num", "Maximum number of words",
value = 100, min = 5),
colourInput("col", "Background color", value = "white")
),
mainPanel(
wordcloud2Output("cloud")
)
)
)
server <- function(input, output) {
# Define a reactive variable named `input_file`
input_file <- ___({
if (is.null(input$file)) {
return("")
}
# Read the text in the uploaded file
readLines(input$___$datapath)
})
output$cloud <- renderWordcloud2({
# Use the reactive variable as the word cloud data source
create_wordcloud(data = ___(), num_words = input$num,
background = input$col)
})
}
shinyApp(ui = ui, server = server)