上传文本文件(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)后,您就可以按需要读取该文件。如果上传的是 CSV 文件,可以使用 read.csv();如果只是想读取文件中的所有文本行,可以使用 readLines();或者使用任何接受文件路径作为输入的函数。
本练习是课程的一部分
案例研究:使用 R 的 Shiny 构建 Web 应用
练习说明
您的任务是将上传文件中的文本用作词云的数据源。具体要求:
- 定义一个名为
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)