开始使用免费开始使用

上传文本文件(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)
编辑并运行代码