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
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_fileche 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).
- Usando il percorso del file caricato, leggi il testo nel file con la funzione
- Usa la variabile reattiva
input_file()come parametrodatadella 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)