我有以下用于下载数据的R脚本,但它给了我一个错误。我该如何解决这个错误?
rm(list=ls(all=TRUE))
library('purrr')
years <- c(1980:1981)
days <- c(001:002)
walk(years, function(x) {
map(x, ~sprintf("https://hydro1.gesdisc.eosdis.nasa.gov/data/NLDAS/NLDAS_MOS0125_H.002/%s/%s/.grb", years, days)) %>%
flatten_chr() -> urls
download.file(urls, basename(urls), method="libcurl")
})
错误:
download.file(urls,basename(urls),method =&#34; libcurl&#34;)出错: 此平台不支持download.file(method =&#34; libcurl&#34;) 我有以下R脚本用于下载数据,但它给我一个错误。我该如何解决这个错误?
会话信息:
答案 0 :(得分:2)
这意味着libcurl
可能无法安装或可用于您的操作系统。请注意,method
参数有其他选项,并且该方法因操作系统而异(与错误消息中的平台大致相同)。我会尝试使用其他方法(例如wget
,curl
...)。
在download.files
的帮助下......
The supported ‘method’s do change: method ‘libcurl’ was introduced
in R 3.2.0 and is still optional on Windows - use
‘capabilities("libcurl")’ in a program to see if it is available.
答案 1 :(得分:1)
我已经开始对@gballench的答案进行轻微编辑了(因为我不需要这些pts)但是它比你拥有它更复杂,因为你不会用这个成语找到你需要的文件(由于一系列原因,我99%肯定是出于我的答案:-)。
首先days
需要用0
s填充到第3个长度,但是你做的方式不会这样做。其次,您可能希望从每年/ 00x组合下载所有.grb
个文件,因此您需要一种方法来获取这些文件。最后,该站点需要身份验证,因此您需要注册并使用基本身份验证。
这样的事情:
library(purrr)
library(httr)
library(rvest)
years <- c(1980:1981)
days <- sprintf("%03d", 1:2)
sprintf("http://hydro1.gesdisc.eosdis.nasa.gov/data/NLDAS/NLDAS_MOS0125_H.002/%s/%%s/", years) %>%
map(~sprintf(.x, days)) %>%
flatten_chr() %>%
map(~{
base_url <- .x
sprintf("%s/%s", base_url, read_html(.x) %>%
html_nodes(xpath=".//a[contains(@href, '.grb')]") %>%
html_attr("href"))
}) %>%
flatten_chr() %>%
discard(~grepl("xml$", .)) %>%
walk(~{
output_path <- file.path("FULL DIRECTORY PATH", basename(.x))
if (!file.exists(output_path)) {
message(.x)
GET(
url = .x,
config = httr::config(ssl_verifypeer = FALSE),
write_disk(output_path, overwrite=TRUE),
authenticate(user = "me@example.com", password = "xldjkdjfid8y83"),
progress()
)
}
})
您需要安装httr
软件包,该软件包将安装curl
软件包并最终使libcurl
可用于将来更简单的批量下载。
我记得我有一个帐户,所以我把它与这个应用程序联系起来对此进行了测试(在30次下载时将其杀死)并且可以正常我在progress()
电话中添加了GET()
,因此您可以看到它下载单个文件。它会跳过已下载的文件(因此您可以随时将其删除并重新启动)。如果您需要重新下载任何内容,只需删除要重新下载的文件。
如果您还需要.xml
个文件,请删除discard()
来电。