微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

NetCDF:HDF 错误仅在 R 中的循环内

如何解决NetCDF:HDF 错误仅在 R 中的循环内

我有一个脚本来循环选择 net cdf 文件。打开文件提取数据,然后再次关闭。我以前用过很多次,它没有问题。我最近收到了一组新的文件来运行相同的代码。我可以使用 ncdf4 包和 nc_open() 函数单独检查文件文件看起来不错,没有损坏。但是,当我运行循环时,该函数不会让我打开文件并出现此错误

Error in R_nc4_open: NetCDF: HDF error

当我运行循环进行检查时,一切正常并且文件打开。它只是不能在循环中打开。代码没有问题。

以前有没有人遇到过这种情况,未损坏的网络 cdf 文件仅偶尔会出现此错误。即使在循环之外,我也可以运行代码并第一次得到错误,然后在不更改任何内容的情况下再次运行它并且连接正常工作。

不知道如何解决这个问题,所以只是想看看为什么会发生这种情况的建议。

代码片段:

targetYear <- '2005-2019'
variables <- c('CHL','SSH')
ncNam <- list.files(folderdir,'.nc',recursive = TRUE)

for(v in 1:length((variables)))
{
varNam <- unlist(unique(variables))[v]

# Get names corresponding to variable
varLs <- ncNam[grep(varNam,basename(ncNam))]
varLs <- varLs[grep(targetYear,varLs)]}
varLs <- varLs[1]
export <- paste0(exportdir,varNam,'/')
dir.create(export,recursive = TRUE)

if(varNam == 'Proximity1km' | varNam == 'Proximity200m'| varNam == 
'ProximityCoast'| varNam == 'Bathymetry'){

fileNam <- varLs
ncfilename <- paste0(folderdir,fileNam)
print(ncfilename)
  
# Read ncfile
ncfile <- nc_open(ncfilename)  
  
nc_close(ncfile) 
gc()
  
} else {

fileNam <- varLs
ncfilename <- paste0(folderdir,fileNam)
print(ncfilename)
  
# Read ncfile

ncfile <- nc_open(ncfilename)

nc_close(ncfile) 
gc()}`

解决方法

我发现了这个问题。这与 .nc 文件中的错误检测文件管理器有关。

我删除了过滤器,文件在循环内工作正常。还是有点奇怪。

也许 ncdf4 包不是最新的过滤。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。