" download.file"下载不完整且不一致

时间:2016-09-10 00:40:16

标签: r csv download

我试图了解为什么我从网站存档下载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 

LOG OF FAILED RUN

2 个答案:

答案 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")