【问题标题】:How can I read a column in an imported csv file in R shiny?如何在 R Shiny 中读取导入的 csv 文件中的列?
【发布时间】:2021-12-14 13:31:35
【问题描述】:

我想从我的计算机中导入一个 CSV 文件,其中包括指向闪亮应用程序的网络文章的 URL。然后我想从 CSV 文件中的“url”列中获取 100 个 URL,然后网络抓取所有这些 URL 以创建“Word cloud”。

这是代码的服务器部分。我想从 CSV 文件中选择“url”列,并使用 for 循环遍历“url”的前 10 个,以便从这些 URL 引导的所有文章中抓取数据。然后我将该数据分配给名为“inputWords”的变量,然后将“inputWords”再次分配给一个名为“data”的变量以创建词云:

server <- function(input, output) {
data_source <- reactive({
    if (input$source == "csv") {
        data <- inputWords()
    }
    return(data)
})

inputWords <- reactive({
    if (is.null(input$csv)) {
        return("")
    }
    
    else if (is.table(input$csv)) {
        CSVFile <- read.csv(input$csv$datapath)
        Urls <- c(CSVFile$url[1:10])
        
        pages <- list()
        
        for (i in Urls) {
            ArticlePages <- read_html(i)
            
            articleText = ArticlePages %>% html_elements("h1.newsfull__title, p") %>% html_text()
            pages[[i]] <- c(articleText)
        }
        pages[1:10]
    }
})

这就是我将“data_source”分配给词云的地方

output$cloud <- renderWordcloud2({
    create_wordcloud(data_source(),
                     num_words = input$num)
})

这是警告信息:

Warning: Error in if: argument is of length zero

Link to sample data

【问题讨论】:

  • read.csv(colnames(input$file$datapath)) 更改为read.csv(input$file$datapath),因为noticias 不是列名,而只是Section 下的值。
  • 感谢您的建议,但我仍然收到相同的错误消息。因此,我手动对“noticias”文章进行排序并创建了一个 csv 文件,并尝试从其“url”列中删除链接,然后我收到相同的错误消息。猜猜这部分有什么问题。 ` input_file % html_elements("h1.newsfull__title, p") %>% html_text() pages[[i]]

标签: r web-scraping shiny reactive import-csv


【解决方案1】:

以下内容适用于您的示例数据。我不确定是什么问题,因为您没有显示您的 ui

library(rvest)

ui <- fluidPage(
  titlePanel("title panel"),
  fluidRow(
    column(3, fileInput("csv", h3("File input"))
    )
  ),
  fluidRow(
    column(width = 9, verbatimTextOutput("t1"))
  )
)

server <- function(input, output) {
  # data_source <- reactive({
  #   if (input$source == "csv") {
  #     data <- inputWords()
  #   }
  #   return(data)
  # })
  
  inputWords <- reactive({
    req(input$csv)
    CSVFile <- read.csv(input$csv$datapath)
    Urls <- as.character(CSVFile$url[1:10])
    
    pages <- list()
    
    for (i in Urls) {
      ArticlePages <- read_html(i)
      
      articleText = ArticlePages %>% html_elements("h1.newsfull__title, p")  %>% html_text()
      pages[[i]] <- c(articleText)
    }
    pages[1:10]
  })
  
  output$t1 <- renderText({paste(inputWords())})
  
}

shinyApp(ui = ui, server = server)

【讨论】:

    猜你喜欢
    • 2014-09-15
    • 2022-01-06
    • 2021-03-11
    • 2016-06-25
    • 2021-12-29
    • 1970-01-01
    • 1970-01-01
    • 2019-11-10
    • 2019-12-21
    相关资源
    最近更新 更多