2016-11-21 120 views
0

我試圖從一個名爲OPenDAP的開放聯機數據庫下載並打開netcdf文件。當我直接從OPenDAP的服務器數據集訪問表單下載數據文件,命名文件「MUR_JPL_L4_GLOB_opendap.nc.nc4」時,我可以在R Studio中成功下載和查看數據。在Windows R 64bit下從OPeNDAP下載並打開netcdf文件

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

然而,已經下載內RStudio(「MUR_JPL_L4_GLOB_rstudio.nc.nc4」)不能作爲R Studio中使用從包中nc_open()函數被打開該數據文件「ncdf4」。當我嘗試用下面的代碼打開文件時,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()函數力中的R Studio中的崩潰,而直接將文件通過我的瀏覽器功能下載正確的RStudio下載的文件? 2)你知道任何可以解決這個問題的修復嗎?

我的最終目標是下載並處理許多這些文件,這就是爲什麼使用我的瀏覽器手動下載所有數據不是一個好的選擇。

我sessionInfo()如下:

ř版本3.3.2(2016年10月31日) 平臺:x86_64的-W64-的mingw32/64(64位) 下運行:視窗> = 8 64(建立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]統計圖形grDevices utils的數據集的方法基礎

其他附軟件包: [1] ncdf4_1.15

經由一個命名空間加載(和未附): [1] tools_3.3.2

在此先感謝您的幫助。

回答

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") 
    } 
} 
+0

更新:循環的url部分似乎不能正常工作。 錯誤在download.file(url = filenamesNC [j],destfile = paste0(url_year [i],:方案在URL中不支持'NA' 試圖創建一個單獨的URL向量並調用url_list [i]但沒有運氣,奇怪 – Jbell