Ladda upp en textfil (server)
När användaren väljer en fil laddas den upp till datorn som kör Shiny-appen och blir tillgänglig på servern.
Om indata-ID:t för en filinmatning är "myfile", kan man tänka sig att input$myfile ger åtkomst till den uppladdade filen – men så fungerar det faktiskt inte. input$myfile returnerar istället en data.frame med ett par metadatafält om den valda filen, och det viktigaste är datapath. Förutsatt att filinmatningens ID är "myfile", anger input$myfile$datapath sökvägen till filen.
När du har fått sökvägen till den uppladdade filen (till exempel C:\Users\Dean\AppData\Local\Temp\path\to\file.txt) kan du använda den för att läsa in filen på det sätt du behöver. Använd read.csv() om filen är en CSV-fil, readLines() om du vill läsa in alla rader i filen, eller någon annan funktion som tar emot en sökväg.
Den här övningen är en del av kursen
Fallstudier: Bygg webbapplikationer med Shiny i R
Övningsinstruktioner
Din uppgift är att använda texten från den uppladdade filen som datakälla för ordmolnet. Mer specifikt:
- Definiera en reaktiv variabel med namnet
input_filesom lagrar texten från den uppladdade filen (rad 19).- Läs in texten i den uppladdade filen med funktionen
readLines()och använd filens sökväg som argument (rad 24).
- Läs in texten i den uppladdade filen med funktionen
- Använd den reaktiva variabeln
input_file()somdata-parameter i ordmolnsfunktionen (rad 29).
För att testa filuppladdningen kan du skapa en valfri textfil på din dator och ladda upp den i appen. Du kan också använda den här filen (spara den som en textfil på din dator) för att testa ordmolnsfunktionen med texten från Martin Luther King Jr:s tal I Have a Dream.
Interaktiv övning med praktiskt arbete
Testa den här övningen genom att slutföra den här exempelkoden.
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)