IniziaInizia gratis

Carica un file di testo (server)

Dopo che l’utente seleziona un file, questo viene caricato sul computer che esegue l’app Shiny e diventa disponibile nel server.

Se l’ID di un file input è "myfile", potresti aspettarti che input$myfile ti dia accesso al file caricato, ma i file input non funzionano così. input$myfile restituisce un data.frame con alcune informazioni di metadati sul file selezionato; quella principale a cui prestare attenzione è datapath. Supponendo che l’ID del file input sia "myfile", input$myfile$datapath sarà il percorso in cui si trova il file.

Dopo aver ottenuto il percorso del file caricato (per esempio C:\Users\Dean\AppData\Local\Temp\path\to\file.txt), puoi usare questo percorso per leggere il file nel modo che ti serve. Puoi usare read.csv() se il file caricato è un CSV, oppure readLines() se vuoi semplicemente leggere tutte le righe del file, o qualsiasi altra funzione che accetti un percorso di file.

Questo esercizio fa parte del corso

Casi di studio: creare applicazioni web con Shiny in R

Visualizza il corso

Istruzioni dell'esercizio

Il tuo compito è usare il testo del file caricato come sorgente dati per la word cloud. In particolare:

  • Definisci una variabile reattiva chiamata input_file che conterrà il testo del file caricato (riga 19).
    • Usando il percorso del file caricato, leggi il testo nel file con la funzione readLines() (riga 24).
  • Usa la variabile reattiva input_file() come parametro data della funzione per la word cloud (riga 29).

Per provare il caricamento dei file, puoi creare un qualsiasi file di testo sul tuo computer e caricarlo nell’app. In alternativa, puoi usare questo file (salvalo come file di testo sul tuo computer) per testare la funzione di word cloud con il testo del discorso I Have a Dream di Martin Luther King Jr.

Esercizio pratico interattivo

Prova a risolvere questo esercizio completando il codice di esempio.

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)
Modifica ed esegui il codice