【发布时间】:2021-07-11 15:41:20
【问题描述】:
我有一个网络抓取功能,它获取年份(期限)和月份(期限2)并将新闻标题作为数据框返回:
news <- function(term, term2) {
html_dat <- read_html(paste0("https://news.google.com/search?q=site%3%2F",term,"%2F",term2,"&hl=en-US&gl=US&ceid=US%3Aen"))
news_dat <- data.frame(
Title = html_dat %>%
html_nodes("a.DY5T1d") %>%
html_text()
)
return(news_dat)
}
df <- news('2020', '05')
我想创建一个循环,它将参数从 2000 年到 2021 年以及每个月。例如,循环将接受参数 news('2000', '01') 然后迭代到 news('2000', '02')。
我想返回上述时间线中所有标题的数据框/列表。我的代码不起作用:
years <- 2000:2021
months <- 1:12
for (i in length(years)){
for (j in length(months)){
temp <- news(i,j)
}
newdf <- rbind(newdf, temp)
}
【问题讨论】:
-
length(years)返回单个值。也许您想改用years或seq_along(years)? -
嘿,谢谢。这就说得通了!我将其更改为 seq_along(years),对于 temp
-
@purple1437 你得到这个错误是因为你在
rbind中使用它之前没有定义newdf。在循环之前将newdf定义为空白数据框,并且应该解决错误。 -
newdf未找到,因为在循环的第一次迭代中,newdf不存在。顺便说一句,作为一般规则,如果您在 R 中使用`for` 循环,几乎可以肯定有更好的方法。这是一个典型的例子。 -
如果我理解正确的话,
library(tidyverse) newdf <- tibble() %>% expand(year=2000:2021, month=1:12)是一个单行的 tidyverse 解决方案,可以满足您的需求。
标签: r