首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在64位Windows R中从OPeNDAP下载和打开netcdf文件

在64位Windows R中从OPeNDAP下载和打开netcdf文件
EN

Stack Overflow用户
提问于 2016-11-21 22:47:53
回答 1查看 1.8K关注 0票数 1

我正在尝试从一个名为OPenDAP的开放的在线数据库下载并打开netcdf文件。当我直接从OPenDAP的服务器数据集访问表单下载数据文件时,将文件命名为"MUR_JPL_L4_GLOB_opendap.nc.nc4",就可以在OPenDAP中成功下载和查看数据。

代码语言:javascript
复制
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中成功地下载和查看数据。

代码语言:javascript
复制
library("ncdf4")
GHRSST<-nc_open("MUR_JPL_L4_GLOB_browser.nc.nc4")
print(GHRSST)
nc_close(GHRSST)

当我尝试在R中使用download.file()函数直接从上面的URL下载数据时,我也可以成功地下载文件。

代码语言:javascript
复制
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")

但是,这个在RStudio ("MUR_JPL_L4_GLOB_rstudio.nc.nc4")中下载的数据文件不能在R Studio中使用包“ncdf4”中的nc_open()函数打开。当我尝试用下面的代码打开这个文件时,R Studio报告了一个“断言失败”的错误,随后R Studio立即崩溃。

代码语言:javascript
复制
library("ncdf4")
GHRSST<-nc_open("MUR_JPL_L4_GLOB_rstudio.nc.nc4")
ASSERTION FAILED!...

我的R Studio版本和ncdf4包都是最新的。我在Rgui中尝试了相同的代码,但出现了类似的错误消息并崩溃。我也曾在另一台电脑上尝试过同样的结果,并使用了不同的下载功能,例如"downloader“包中的”download“,但也以同样的方式失败了。我还下载了该文件的一个小子集,以防出现大文件大小的问题,但这并没有帮助。

我的问题是:

1)为什么使用download.file()函数打开RStudio下载的文件会在R Studio中强制崩溃,而我的浏览器直接下载的文件却可以正常运行? 2)您是否知道可以解决此问题的任何修复程序?

我的最终目标是下载和处理许多这样的文件,这就是为什么使用我的浏览器手动下载所有数据不是一个好的选择。

我的sessionInfo()如下:

R版本3.3.2 (2016-10-31)平台: x86_64-w64-mingw32/x64 (64位)在Windows >= 8 x64 (build 9200)下运行

区域设置:1个LC_COLLATE=English_United状态。1252个LC_CTYPE=English_United状态。1252个LC_MONETARY=English_United状态。1252 4个LC_NUMERIC=C LC_TIME=English_United状态。1252

附加的基础软件包:1统计图形grDevices实用程序数据集方法基础

其他附加软件包:1个ncdf4_1.15

通过命名空间加载(未附加):1 tools_3.3.2

提前感谢您的帮助。

EN

回答 1

Stack Overflow用户

发布于 2017-07-11 16:48:33

我只是刚刚看到这一点,并且一直在尝试解决同样的问题。我还通过R从PODAAC ftp服务器下载,并尝试使用mapply(download.file())进行循环。我想我的问题出在mapply()上,不知何故,它不能正确地构建下载的文件(我也无法打开通过RStudio或base R下载的文件,但如果我从ftp中手动打开它们就可以了)。

似乎对我有效的解决方案是在第二个循环中添加,一旦您获得了单个目录的文件名(我跨几年下载,每个目录都有自己的文件夹),就会为每个实例运行download.file()

代码语言:javascript
复制
# 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")
  }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40722910

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档