CommencerCommencer gratuitement

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

Afficher le cours

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_file qui 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).
  • Utilisez la variable réactive input_file() comme paramètre data de 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)
Modifier et exécuter le code