如何在 R shiny 中读取导入的 csv 文件中的列?
How can I read a column in an imported csv file in R shiny?
我想从我的计算机导入一个 CSV 文件,其中包含指向闪亮应用的网络文章的 URL。然后我想从 CSV 文件中的“url”列中获取 100 个 URL,并通过网络抓取所有这些 URL 以创建“词云”。
这是代码的服务器部分。我想 select 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
以下适用于您的示例数据。我不确定是什么问题,因为您没有显示您的 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)
我想从我的计算机导入一个 CSV 文件,其中包含指向闪亮应用的网络文章的 URL。然后我想从 CSV 文件中的“url”列中获取 100 个 URL,并通过网络抓取所有这些 URL 以创建“词云”。
这是代码的服务器部分。我想 select 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
以下适用于您的示例数据。我不确定是什么问题,因为您没有显示您的 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)