LoslegenKostenlos loslegen

Eine Textdatei hochladen (Server)

Nachdem der/die Nutzer:in eine Datei ausgewählt hat, wird sie auf den Computer hochgeladen, auf dem die Shiny-App läuft, und ist dann im Server verfügbar.

Wenn die Input-ID eines Datei-Uploads „myfile“ ist, könntest du erwarten, dass input$myfile dir Zugriff auf die hochgeladene Datei gibt. So funktionieren Datei-Inputs jedoch nicht. input$myfile liefert ein data.frame mit einigen Metadaten zur ausgewählten Datei. Am wichtigsten ist dabei datapath. Angenommen, die ID des Datei-Inputs ist „myfile“, dann ist input$myfile$datapath der Pfad, unter dem die Datei liegt.

Nachdem du den Pfad der hochgeladenen Datei ermittelt hast (zum Beispiel C:\Users\Dean\AppData\Local\Temp\path\to\file.txt), kannst du diesen Pfad verwenden, um die Datei auf die benötigte Weise einzulesen. Du kannst read.csv() verwenden, wenn die hochgeladene Datei eine CSV-Datei ist, oder readLines(), wenn du einfach alle Zeilen der Datei einlesen möchtest, oder jede andere Funktion, die einen Dateipfad akzeptiert.

Diese Übung ist Teil des Kurses

Fallstudien: Webanwendungen mit Shiny in R erstellen

Kurs anzeigen

Anleitung zur Übung

Deine Aufgabe ist es, den Text aus der hochgeladenen Datei als Datenquelle für die Wortwolke zu verwenden. Konkret:

  • Definiere eine reaktive Variable namens input_file, die den Text aus der hochgeladenen Datei hält (Zeile 19).
    • Lies mit dem Pfad der hochgeladenen Datei den Text in der Datei mit der Funktion readLines() ein (Zeile 24).
  • Verwende die reaktive Variable input_file() als Parameter data der Wortwolkenfunktion (Zeile 29).

Zum Testen des Datei-Uploads kannst du eine beliebige Textdatei auf deinem Computer erstellen und in die App hochladen. Alternativ kannst du diese Datei verwenden (speichere sie als Textdatei auf deinem Computer), um die Wortwolkenfunktion mit dem Text aus Martin Luther King Jr.s Rede „I Have a Dream“ zu testen.

Interaktive Übung

Vervollständige den Beispielcode, um diese Übung erfolgreich abzuschließen.

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 bearbeiten und ausführen