我正在尝试用r写一个循环。我的代码的第一部分工作得很好,这是连接一个URL和一个包含三年(1999-2001)的值。
url <- 'https://www.baseball-almanac.com/players/baseball_births.php?order=LastName,%20FirstName&y='
birth_yrs <- as.character(1999:2001)
for(i in birth_yrs) {
nam <- paste("year", i, sep = ".")
assign(nam, i)
nam2<-paste(url, i ,sep = "")
assign(nam,paste(url, i ,sep = ""))
}
这在我的全局环境中给出了以下值:
全局环境视图我现在要做的是在循环中使用xml2包中的read_html()函数来保存html页面。我的代码如下:
for(i in birth_yrs) {
nam3 <- paste("baseball", i, sep = ".")
assign(nam3,read_html(paste("year",i,sep = "")))
}
运行此代码会得到以下错误消息:
错误:'year1999'在当前工作目录('C:/Users/.....')中不存在。
当我运行代码时:
test<-read_html(year.1999)
它工作完美,没有问题:文件代码工作正常
如有任何建议,不胜感激。
谢谢。
如@Waldi所述,您正在提供一个测试字符串。如果您想在仅提供测试字符串时使用变量的内容,则可以使用get()
。当提供get字符串时,它将搜索与提供的字符串匹配的变量名,并返回在匹配变量中存储的内容。试一试:
for(i in birth_yrs){
nam3 <- paste("baseball", i, sep = ".")
assign(nam3, read_html( get(paste("year",i,sep = ".") ) ))
}
将数据存储在列表中。您可以使用lapply
从每个值中提取您想要的任何值。
library(rvest)
url <- paste0('https://www.baseball-almanac.com/players/baseball_births.php?order=LastName,%20FirstName&y=', 1999:2001)
url_data <- lapply(url, read_html)