问题描述
我正在尝试在 R 中打开 MOdis Aqua NetCDF 文件 (https://oceandata.sci.gsfc.nasa.gov/MODIS-Aqua/L3SMI/2010/001/)。我尝试了许多软件包,但似乎没有一个能够处理文件格式。
library(ncdf4)
这不起作用。
nc_open("~/Desktop/A20100012010008.L3b_8D_CHL.nc")
#> Error in ncvar_type_to_string(rv$precint): Error,unrecognized type code of variable supplied: -1
但是,它适用于所有其他 NetCDF 文件。例如,我可以打开 CCI 合并文件。
head(nc_open("~/Desktop/ESACCI-OC-L3S-CHLOR_A-MERGED-1M_MONTHLY_4km_GEO_PML_OCx-201701-fv5.0.nc"))
#> $filename
#> [1] "~/Desktop/ESACCI-OC-L3S-CHLOR_A-MERGED-1M_MONTHLY_4km_GEO_PML_OCx-201701-fv5.0.nc"
#>
#> $writable
#> [1] FALSE
#>
#> $id
#> [1] 131072
#>
#> $safemode
#> [1] FALSE
#>
#> $format
#> [1] "NC_FORMAT_NETCDF4_CLASSIC"
#>
#> $is_GMT
#> [1] FALSE
关于为什么这不起作用的任何想法?
由 reprex package (v1.0.0) 于 2021 年 2 月 20 日创建
解决方法
当我使用 ncdump
查看其中一个 "Binned" files 时,它具有组属性,这意味着它使用 NetCDF enhanced data model。
因此,大多数 netCDF 软件不支持它。 ncdump
应该允许您批量导出到文本。另一种可能性是使用 HDF5 库读取文件。否则,我建议您通过其他方式获取数据。也许工作的 NetCDF 文件可能具有相同的数据,只是打包方式不同?
这是 ncdump
输出的一部分
group: level-3_binned_data {
types:
compound binListType {
uint bin_num ;
short nobs ;
short nscenes ;
float weights ;
float time_rec ;
}; // binListType
compound binDataType {
float sum ;
float sum_squared ;
}; // binDataType
compound binIndexType {
uint start_num ;
uint begin ;
uint extent ;
uint max ;
}; // binIndexType
dimensions:
binListDim = UNLIMITED ; // (5643478 currently)
binDataDim = UNLIMITED ; // (5643478 currently)
binIndexDim = UNLIMITED ; // (4320 currently)
variables:
binListType BinList(binListDim) ;
binDataType chlor_a(binDataDim) ;
binDataType chl_ocx(binDataDim) ;
binIndexType BinIndex(binIndexDim) ;
data:
} // group level-3_binned_data