0

为了继续我的研究,我从 CMIP 网站下载了 NCAR 数据集,包括 tasmax、tasmin、pr 和 rsds 变量。但是,尽管可以获得看起来错误的结果,但我无法使用 R 代码正确读取这些数据集。NCAR 数据集似乎与其他 CMIP 数据集有很大不同,我的 R 代码可以在其中顺利运行。这是我的 R 代码: library(ncdf4) library(raster) library(sp)

# read ncdf file
nc<-nc_open('D:/Study/Data/CMIP6/tasmax/tasmax_Amon_CESM1-CAM5-SE-HR_highres-future_r1i1p1f1_gn_201501-205012.nc')
v <- nc$var[[1]]
varsize <- v$varsize
ndims <- v$ndims
nt <- varsize[ndims] # Remember timelike dim is always the LAST dimension!
lat=nc$dim$ncol$vals
lon=nc$dim$ncol$vals
r<-list()
for (i in 1:nt) {
  start <- rep(1,ndims)     # begin with start=(1,1,...,1)
  start[ndims] <- i             # change to start=(1,1,...,i) to read    timestep i
  count <- varsize                # begin with count=(nx,ny,...,nt), reads entire var
  count[ndims] <- 1             # change to count=(nx,ny,...,1) to read 1 tstep
  dt=matrix(ncvar_get(nc, v, start = start, count = count),nrow = 1247,ncol=624,byrow=TRUE)

  # convert to raster
  r[i]<-raster(dt)
}
# create layer stack with time dimension
r<-stack(r)
rt=t(r)

extent(rt)<-extent(c(range(lon), range(lat)))
crs(rt) <- "+proj=longlat"
writeRaster(rt,"D:/Study/Data/CMIP6/tasmax/tasmax_Amon_CESM1-CAM5-SE-HR_highres- 
future_r1i1p1f1_gn_201501-205012.tif",format="GTiff",overwrite=TRUE)

下面是这个 nc 文件的数据格式以及与其他可以正确读取的 nc 文件的比较。

dimensions (NCAR file):
nbnd = 2;
grid_corners = 5;
ncol = 777602;
time = UNLIMITED;   // (432 currently)

dimensions (other nc file):
axis_nbounds = 2;
lat = 360;
lon = 720;
time = UNLIMITED;   // (120 currently)

我该如何解决这个问题?

4

1 回答 1

1

你没有说什么不起作用,你没有显示错误消息,你没有提供文件的链接(例如谷歌驱动器),这使得它很难提供帮助。

另外,为什么你使用如此复杂的方法来读取 ncdf 文件?有了这个raster包,你应该可以做到

library(raster)
rt <- brick("tasmax_Amon_CESM1-CAM5-SE-HR_highres-future_r1i1p1f1_gn_201501-205012.nc")

但我会推荐terra(替换raster)并做

library(terra)
rt <- rast("tasmax_Amon_CESM1-CAM5-SE-HR_highres-future_r1i1p1f1_gn_201501-205012.nc")
于 2021-12-13T14:56:47.307 回答