ПочатиПочніть безкоштовно

Завантаження текстового файла (server)

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

Якщо ID елемента введення для файла — «myfile», ви могли б очікувати, що input$myfile надасть доступ до завантаженого файла, але файлові інпуты працюють інакше. input$myfile повертає data.frame з кількома метаданими про вибраний файл, серед яких головне поле — datapath. Якщо ID файла — «myfile», то input$myfile$datapath — це шлях, за яким розташовано файл.

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

Ця вправа є частиною курсу

Case Studies: створення вебзастосунків із Shiny в R

Переглянути курс

Інструкції до вправи

Ваше завдання — використати текст із завантаженого файла як джерело даних для хмари слів. Зокрема:

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

Щоб перевірити завантаження файла, створіть будь-який текстовий файл на своєму комп'ютері та завантажте його в застосунок. Або скористайтеся цим файлом (збережіть його як текстовий файл на своєму комп'ютері), щоб протестувати функцію хмари слів на тексті промови Мартіна Лютера Кінга-молодшого „I Have a Dream".

Інтерактивна практична вправа

Спробуйте виконати цю вправу, доповнивши цей зразок коду.

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