Aan de slagBegin gratis

Upload een tekstbestand (server)

Nadat de gebruiker een bestand selecteert, wordt dat bestand geüpload naar de computer waarop de Shiny-app draait, en wordt het beschikbaar op de server.

Als de input-ID van een bestandsinvoer "myfile" is, verwacht je misschien dat input$myfile je toegang geeft tot het geüploade bestand, maar zo werken bestandsinvoeren niet. input$myfile retourneert een data.frame met een paar stukjes metadata over het geselecteerde bestand, waarvan datapath het belangrijkste is. Als de ID van de bestandsinvoer "myfile" is, dan is input$myfile$datapath het pad waar het bestand staat.

Nadat je het pad van het geüploade bestand hebt opgehaald (bijvoorbeeld C:\Users\Dean\AppData\Local\Temp\path\to\file.txt), kun je dit pad gebruiken om het bestand te lezen zoals je nodig hebt. Je kunt read.csv() gebruiken als het geüploade bestand een CSV-bestand is, of readLines() als je simpelweg alle regels in het bestand wilt lezen, of elke andere functie die een bestandspad accepteert.

Deze oefening maakt deel uit van de cursus

Casestudies: webapplicaties bouwen met Shiny in R

Bekijk cursus

Oefeninstructies

Je taak is om de tekst uit het geüploade bestand te gebruiken als databron voor de wordcloud. Concreet:

  • Definieer een reactive variabele met de naam input_file die de tekst uit het geüploade bestand bevat (regel 19).
    • Gebruik het pad van het geüploade bestand om de tekst in het geüploade bestand te lezen met de functie readLines() (regel 24).
  • Gebruik de reactive variabele input_file() als de parameter data van de wordcloudfunctie (regel 29).

Om het uploaden te testen, kun je op je computer een willekeurig tekstbestand aanmaken en het uploaden naar de app. Je kunt ook dit bestand gebruiken (sla het op als tekstbestand op je computer) om de wordcloud te testen met de tekst uit Martin Luther King Jr.'s toespraak I Have a Dream.

Interactieve oefening met praktijkervaring

Probeer deze oefening door deze voorbeeldcode aan te vullen.

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)
Code bewerken en uitvoeren