Kom igångKom igång gratis

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

Visa kurs

Ö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_file som 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).
  • Använd den reaktiva variabeln input_file() som data-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)
Redigera och kör kod