我正在为全世界提供NetCDF格式的aquaMODIS叶绿素数据。
我想从整个数据中仅裁剪longitude 70-85
和latitude 4-18
的区域。然后我想聚合数据,我也想在聚合后绘制数据。
但是,我在阅读数据时遇到了问题:
ncvar_get(mayWEEK1)中的错误:第一个参数(nc)不属于ncdf4类!
请指导我这件事。
可以使用nc-data的示例here。我的语法如下:
# Adding packages
library(raster)
library(ncdf4)
# Loading the data
mayWEEK1 <- "E:/NIOdisseratation_WORK/Aqua_MODIS_chlorophyll/MAY/2003/2003MAY_week1.nc"
ncfWEEK1 <- brick(mayWEEK1, var="chlor_a")
# Aggregation
mayfinal <- raster::aggregate(ncfWEEK1, 2)
# Cropping
rc1 <- crop(mayfinal, extent(70, 85, 4, 18))
plot(rc1)
答案 0 :(得分:2)
UPD 根据建议@RobertH
我们讨论了两种从netCDF文件中读取数据的方法。
如果您专注于数据的快速可视化,那么最自然的方式是使用brick()
包的raster
功能:
var_name <- "sst" # for the example file or "chlor_a" for your chkorophyll data
ncfWEEK1 <- brick(mayWEEK1, varname = var_name)
结果ncfWEEK1
属于RasterBrick
级。然后你可以使用这个类的print()
方法来查看`ncfWEEK1中包含的数据的结构和属性为简单
raster::print(test_brick_box)
请注意,使用存储为RasterBrick
类的数据进行进一步操作可能会非常棘手。
如果您希望将数据读入最简单的R结构(双精度数组),那么ncdf4
可能是更好的解决方案。但是,阅读您的数据看起来会更复杂一些:
首先,您必须打开文件
file_nc_obj <- nc_open(file_to_open_name, verbose = TRUE)
实际上,如果您仍然找到了处理数据的正确方法,最好设置verbose = FALSE
。但是,您可以从verbose = TRUE
开始检查文件的加载方式。
第二步是查看文件中数据的结构。变量file_nc_obj
是ncdf4类的R对象。实际上,有一个类似列表的结构
str(file_nc_obj, max = 1)
这意味着您可以像列表组件一样评估file_nc_obj
的每个内置属性,例如
nc_dim_list <- file_nc_obj$dim
此外,nc文件本身还有一些内置属性;它们也可能很重要:
# read nc-attributes
fileForProc_attributes <- ncatt_get(file_nc_obj,varid=0)
str(fileForProc_attributes)
第三步实际上是使用ncvar_get()
读取您的nc数据。有两个一般性建议:1)请仔细检查ncvar_get()
包ncdf4
的帮助; 2)使用第二步中的结果以正确的方式定义请求。
作为示例附加的nc文件中的变量(包含海面温度"sst"
的空间数据)可以理解如下:
var_lon <- ncvar_get(file_nc_obj,"lon")
var_lat <- ncvar_get(file_nc_obj,"lat")
var_value <- ncvar_get(file_nc_obj,"sst")
test_units <- ncatt_get(file_nc_obj, "sst" ,"units")$value
start_time <- ncatt_get(file_nc_obj, 0, "time_coverage_start")$value
end_time <- ncatt_get(file_nc_obj, 0, "time_coverage_end")$value
第四步不要忘记关闭文件
nc_close(file_nc_obj)
之后,您将准备好数据以进行分析和可视化。