我试图了解为什么我从网站存档下载CSV文件的结果不一致。不知道问题是在我的最后,另一方面还是在两者之间的沟通失败。欢迎任何建议。
使用R脚本自动从HYCOM档案中按月和年份下载CSV文件以进行分析。该脚本生成了以下网址,尝试访问网址' http://ncss.hycom.org/thredds/ncss/GLBu0.08/reanalysis/3hrly?var=salinity&var=water_temp&var=water_u&var=water_v&latitude=13.875&longitude=-72.25&time_start=2012-05-01T00:00:00Z&time_end=2012-05-31T21:00:00Z&vertCoord=&accept=csv'
运行download.file
成功获取文件大约一半时间,否则失败。欢迎任何建议。下图显示了失败的运行。成功运行如下。
成功记录
#download one month of data
MM = '05'
LastDay = ndays(paste(year,MM,'01',sep="-"))
H1 = paste( as shown in image)
H2 = '-01T00:00:00Z&time_end='
#H3 = 'T21:00:00Z&timeStride=1&vertCoord=&accept=csv'
H3 = 'T21:00:00Z&vertCoord=&accept=csv'
HtmlLink <- paste(H1,year,"-",MM,H2,year,"-",MM,"-",LastDay,H3,sep="")
dest = paste("../data/",year,MM,".csv",sep="")
download.file(url =HtmlLink ,destfile=dest,cacheOK=FALSE, method="auto")
trying URL 'as shown in image'
Content type 'text/plain;charset=UTF-8' length unknown
..................................................
................downloaded 666 KB
user system elapsed
28.278 6.605 5201.421
答案 0 :(得分:1)
您可以/应该将以下内容转换为接受参数的函数,并将硬编码值替换为所述参数(我使用httr:::parse_query()
生成list
):
library(httr)
URL <- "http://ncss.hycom.org/thredds/ncss/GLBu0.08/reanalysis/3hrly"
params <- list(var = "salinity",
var = "water_temp",
var = "water_u",
var = "water_v",
latitude = "13.875",
longitude = "-72.25",
time_start = "2012-05-01T00:00:00Z",
time_end = "2012-05-31T21:00:00Z",
vertCoord = "",
accept = "csv")
dest_file <- "filename"
res <- GET(url=URL,
query=params,
timeout(360),
write_disk(dest_file, overwrite=TRUE),
verbose())
warn_for_status(res)
您可以(最终)从verbose()
调用中删除GET
,但在调试过程中它会很有用。
主要问题是此服务器在传输完成之前已经过时并超时。即使360
的值可能还不够(您需要进行实验)。
答案 1 :(得分:0)
非常感谢大家的帮助。 hrbrmstr的建议似乎是一个优雅的答案,我期待测试它。但是,我无法使用程序管理器安装工作副本。从本地下载安装也失败了,因为R抱怨我从CRAN下载的OS X版本是Windows版本,而不是OS X.是的,我多次重复下载以确保我有正确的软件包。
正如Cyrus Mohammadian所说,我尝试了卷曲库中的程序 运行相同的URL,download.file传输失败大约50%的时间。使用curl将传输时间从2000秒减少到1000秒,并且在12次尝试中没有失败。
## calculate number of days in month
ndays <- function(d) {
last_days <- 28:31
rev(last_days[which(!is.na(
as.Date( paste( substr(d, 1, 8),
last_days, sep = ''),
'%Y-%m-%d')))])[1] }
nlat = 13.875
elon = -72.25
#download one month of data
year = 2008
MM = '01'
LastDay = ndays(paste(year,MM,'01',sep="-"))
H1 = paste('http://ncss.hycom.org/thredds/ncss/GLBu0.08/reanalysis/3hrly?
var=salinity&var=water_temp&var=water_u&var=water_v&latitude=',
nlat,'&longitude=', elon,'&time_start=',sep="")
H2 = '-01T00:00:00Z&time_end='
H3 = 'T21:00:00Z&timeStride=1&vertCoord=&accept=csv'
HtmlLink <- paste(H1,year,"-",MM,H2,year,"-",MM,"-",LastDay,H3,sep="")
dest = paste("../data/",year,MM,".csv",sep="")
curl_download(url =HtmlLink ,destfile=dest,quiet=FALSE, mode="wb")