我正在尝试从名为OPenDAP的开放式在线数据库下载并打开netcdf文件。当我直接从OPenDAP的服务器数据集访问表单下载数据文件时,命名文件“MUR_JPL_L4_GLOB_opendap.nc.nc4”,我可以在R Studio中成功下载和查看数据。
library("ncdf4")
GHRSST<-nc_open("MUR_JPL_L4_GLOB_opendap.nc.nc4")
print(GHRSST)
nc_close(GHRSST)
此外,当我将数据访问表单的数据URL直接插入我的浏览器时(例如,“http://podaac-opendap.jpl.nasa.gov/opendap/allData/ghrsst/data/GDS2/L4/GLOB/JPL/MUR/v4.1/2009/009/20090109090000-JPL-L4_GHRSST-SSTfnd-MUR-GLOB-v02.0-fv04.1.nc.nc4?lat[0:1:17998],lon[0:1:35999],analysed_sst[0:1:0][0:1:17998][0:1:35999]”),命名文件“MUR_JPL_L4_GLOB_browser.nc.nc4”,我可以下载并查看数据成功进入R Studio。
library("ncdf4")
GHRSST<-nc_open("MUR_JPL_L4_GLOB_browser.nc.nc4")
print(GHRSST)
nc_close(GHRSST)
当我尝试使用download.file()函数直接从R Studio中的上面的URL下载数据时,我也可以成功下载该文件。
download.file("http://podaac-opendap.jpl.nasa.gov/opendap/allData/ghrsst/data/GDS2/L4/GLOB/JPL/MUR/v4.1/2009/009/20090109090000-JPL-L4_GHRSST-SSTfnd-MUR-GLOB-v02.0-fv04.1.nc.nc4?lat[0:1:17998],lon[0:1:35999],analysed_sst[0:1:0][0:1:17998][0:1:35999]","MUR_JPL_L4_GLOB_rstudio.nc.nc4")
但是,已在RS Studio中下载的此数据文件(“MUR_JPL_L4_GLOB_rstudio.nc.nc4”)无法使用程序包“ncdf4”中的nc_open()函数在R Studio中打开。当我尝试使用下面的代码打开文件时,R Studio报告“断言失败”错误,R Studio立即崩溃。
library("ncdf4")
GHRSST<-nc_open("MUR_JPL_L4_GLOB_rstudio.nc.nc4")
ASSERTION FAILED!...
我的R Studio版和ncdf4包是最新的。我在Rgui中尝试了相同的代码,但有类似的错误消息和崩溃。我也在另一台具有相同结果的计算机上尝试了这个,并在“下载程序”包中使用了不同的下载功能,例如“下载”,但它也以同样的方式失败了。我还下载了文件的一小部分,以防大文件大小出现问题,但这没有帮助。
我的问题是:
1)为什么使用download.file()函数打开RStudio下载的文件会导致R Studio崩溃,而我的浏览器直接下载的文件正常运行? 2)你知道有什么修正可以让我解决这个问题吗?
我的最终目标是下载并处理许多这些文件,这就是为什么使用我的浏览器手动下载所有数据不是一个好选择。
我的sessionInfo()如下:
R版本3.3.2(2016-10-31) 平台:x86_64-w64-mingw32 / x64(64位) 运行于:Windows&gt; = 8 x64(build 9200)
区域设置: [1] LC_COLLATE = English_United States.1252 LC_CTYPE = English_United States.1252 LC_MONETARY = English_United States.1252 [4] LC_NUMERIC = C LC_TIME = English_United States.1252
附加基础包: [1] stats graphics grDevices utils数据集方法库
其他附件包: [1] ncdf4_1.15
通过命名空间加载(而不是附加): [1] tools_3.3.2
提前感谢您的帮助。
答案 0 :(得分:1)
我刚刚看到这个并且一直试图解决同样的问题。我也是通过R从PODAAC ftp服务器下载并使用mapply(download.file())
尝试循环。我认为我的问题是mapply()
并且不知何故它没有正确构建下载的文件(我也无法打开它们通过RStudio
或基础R下载但是如果我手动完成它们就没问题了来自ftp)。
似乎对我有用的解决方案是添加第二个循环,一旦你获得了单个目录的文件名(我将在几年内下载,每个都有自己的文件夹),运行每个实例download.file()
。
# ftp://podaac-ftp.jpl.nasa.gov/allData/modis/L3/aqua/4um/v2014.0/4km/monthly
#monthly SST data, one folder per year
require(ncdf4)
require(RNetCDF)
require(RCurl)
month <- c("01", "02", "03", "04", "05", "06", "07",
"08", "09", "10", "11", "12") #months to download
url_year <- seq(2003, 2016, 1) #years to download
for(i in 1:length(url_year)){
url <- paste0("ftp://podaac-ftp.jpl.nasa.gov/allData/modis/L3/aqua/4um/v2014.0/4km/monthly/", url_year[i], "/")
filenames = getURL(url, ftp.use.epsv = FALSE, dirlistonly = TRUE, crlf = TRUE)
filenames = paste(url, strsplit(filenames, "\r*\n")[[1]], sep = "")
filenamesNC = filenames[c(seq(1, 23, 2))] #subset only the netcdf files
for(j in 1:length(filenames)){
download.file(url = filenamesNC[j], destfile = paste0(url_year[i], "_", month[j],"_sst4_4km.nc"), mode="wb")
}
}