Загрузка текстового файла (сервер)
После того как пользователь выбирает файл, он загружается на компьютер, где запущено приложение 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)