【问题标题】:Create NetCDF R创建 NetCDF R
【发布时间】:2014-02-13 23:11:12
【问题描述】:

我正在尝试使用具有尺寸的 3d 矩阵 m3d 编写 NetCDF 文件

73 (LON) x 36 (LAT) x 12 (TIME)

由 12 个暗淡矩阵创建

73 (LON) x 36 (LAT)

这是我的代码

#Setting dimensions

space <- 5
Longvector = seq(-180, 180, by = space)
Latvector = seq(-90, 90, by = space)
dimMATR <- 73
dimMATC <- 36

dimX <- dim.def.ncdf("Long", "degrees", Longvector)
dimY <- dim.def.ncdf("LAT", "degrees", Latvector)
dimT <- dim.def.ncdf("Time", "days", 1:12, unlim = FALSE)

#Create 3d Matrix

m3d <- array(0, dim = c(dimMATR,dimMATC,12))
for (i in 1:12){
  m <- as.matrix(do.call(rbind,myfilesContent[i]))
  m3d[,,i]<-t(m)
  remove(m)
}

#Create NetCDF

mv <- -9999 # missing value to use
L <- prod(dimMATR,dimMATC,12)
var3d <- var.def.ncdf( "monthlyav_sst", "units", list(dimX,dimY,dimT), mv,prec="double")
nc <- create.ncdf( "monthlyav_sst.nc", var3d)

put.var.ncdf(nc, var3d, m3d, start = c(1, 1, 1),  count = c(1, 1, L))
close.ncdf(nc)

无论如何,我得到这个错误的输出

Error in R_nc_put_vara_double: NetCDF: Start+count exceeds dimension bound
Error in put.var.ncdf(nc, var3d, m3d, start = c(1, 1, 1), count = c(1,  : 
  C function R_nc_put_var_double returned error

【问题讨论】:

  • 你可以试试count = c(-1, -1, -1),计数应该会自动确定。顺便说一句:你的意思是Longvector = seq(-180, 180, by = space)

标签: r netcdf


【解决方案1】:

恕我直言,您的问题是错误的 Longvectorput.var.ncdf 中的错误 count 参数,例如这对我有用(请注意:我在for 循环中更改了矩阵生成):

library("ncdf")

# Setting dimensions
space <- 5
Longvector = seq(-180, 180, by = space)
Latvector = seq(-90, 90, by = space)
dimMATR <- length(Longvector)
dimMATC <- length(Latvector)

dimX <- dim.def.ncdf("Long", "degrees", Longvector)
dimY <- dim.def.ncdf("LAT", "degrees", Latvector)
dimT <- dim.def.ncdf("Time", "days", 1:12, unlim = FALSE)

# Create 3d Matrix
m3d <- array(0, dim = c(dimMATR,dimMATC,12))
for (i in 1:12){
  m <- matrix(sample(dimMATR*dimMATC), dimMATR, dimMATC)
  m3d[,,i]<-t(m)
  remove(m)
}

# Create NetCDF
mv <- -9999 # missing value to use
var3d <- var.def.ncdf( "monthlyav_sst", "units", list(dimX,dimY,dimT), mv,prec="double")

nc <- create.ncdf( "monthlyav_sst.nc", var3d)
put.var.ncdf(nc, var3d, m3d, start=c(1, 1, 1), count=dim(m3d))
close(nc)

【讨论】:

    猜你喜欢
    • 2016-03-12
    • 2012-05-21
    • 1970-01-01
    • 2018-09-14
    • 1970-01-01
    • 1970-01-01
    • 2020-05-29
    • 2018-05-03
    • 1970-01-01
    相关资源
    最近更新 更多