我正在尝试批量下载一系列网址。到目前为止,我的代码是
link <- paste("http://portal.hud.gov/hudportal/documents/huddoc? id=RAD_PHAApp_", state, ".xls", sep = "")
state <- c('al','tx')
download.file(link, paste(destfile = 'Y:\\PBlack\\RAD\\', state, '.xls', sep = ""), mode = 'wb')
这里的想法是我可以为状态值添加名称,它会下载并将它们命名为状态。
当我运行代码时,R返回以下内容。
Warning messages:
1: In download.file(link, paste(destfile = "Y:\\PBlack\\RAD\\", state, :
only first element of 'url' argument used
2: In download.file(link, paste(destfile = "Y:\\PBlack\\RAD\\", state, :
only first element of 'destfile' argument used
答案 0 :(得分:1)
您需要调用该命令多次保存文件。现在它不起作用,因为download.file()
函数下载单个文件,而不是文件向量。
如此:
states <- c('al','tx')
links <- paste("http://portal.hud.gov/hudportal/documents/huddoc?id=RAD_PHAApp_", states, ".xls", sep = "")
func.download_files <- function(link,state) {
download.file(link,paste("~/Desktop/",state,".xls",sep=""),mode='wb')
}
mapply(FUN = func.download_files,link=links,state=states)
答案 1 :(得分:0)
正如TARehman指出的那样,您需要为每个文件单独调用download.file。使用for循环执行此操作可能更直观。
另外,使用paste0将避免使用sep =&#34;&#34;每一次。
states <- c('al', 'tx')
for(state in states) {
link <- paste0("http://portal.hud.gov/hudportal/documents/huddoc?id=RAD_PHAApp_", state, ".xls")
download.file(link,paste0("~/Desktop/",state,".xls"),mode='wb')
}
虽然mapply可能会更快一些。