Завантаження текстового файла (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)