НачатьНачать бесплатно

Загрузка текстового файла (сервер)

После того как пользователь выбирает файл, он загружается на компьютер, где запущено приложение Shiny, и становится доступен на сервере.

Если идентификатор элемента загрузки файла — "myfile", можно предположить, что input$myfile даст доступ к загруженному файлу, однако файловые элементы ввода работают иначе. input$myfile возвращает объект типа data.frame, содержащий несколько полей метаданных о выбранном файле. Главное из них — datapath. При идентификаторе "myfile" значение input$myfile$datapath будет содержать путь к файлу на сервере.

Получив путь к загруженному файлу (например, C:\Users\Dean\AppData\Local\Temp\path\to\file.txt), его можно использовать для чтения файла любым подходящим способом. Используйте read.csv(), если загружен CSV-файл, readLines(), если нужно просто прочитать все строки файла, или любую другую функцию, принимающую путь к файлу.

Это упражнение является частью курса

Примеры использования: создание веб-приложений с Shiny в R

Посмотреть курс

Инструкции к упражнению

Ваша задача — использовать текст из загруженного файла в качестве источника данных для облака слов. Для этого:

  • Определите реактивную переменную input_file, которая будет хранить текст из загруженного файла (строка 19).
    • Используя путь к загруженному файлу, прочитайте его содержимое с помощью функции readLines() (строка 24).
  • Используйте реактивную переменную input_file() в качестве параметра data функции генерации облака слов (строка 29).

Чтобы проверить загрузку файла, создайте любой текстовый файл на своём компьютере и загрузите его в приложение. Также можно воспользоваться этим файлом (сохраните его как текстовый файл) — он содержит текст речи Мартина Лютера Кинга-младшего «У меня есть мечта».

Интерактивное практическое упражнение

Попробуйте выполнить это упражнение, дополнив этот пример кода.

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)
Редактировать и запускать код