从R

时间:2019-05-22 16:21:36

标签: r netcdf levels

我正在尝试从R中的特定NetCDF文件提取所有级别。我可以通过将每个级别提取为一行代码然后将它们组合为数据帧来手动完成。但是,当我有很多文件时,这很长。是否可以将所有43层提取到一个文件中?

我已将此How to extract all levels from a netcdf file using the raster package?Plotting netcdf file with levels in R用作指导

从本质上讲,硝酸盐数据来自
    https://www.nodc.noaa.gov/cgi-bin/OC5/woa18/woa18oxnu.pl的浓度集中在43个不同的深度。是否可以提取特定位置的所有深度?

我可以做到这一点。但是每个级别代表一个深度。是否有可能获得所有等级?

我也不理解第三条警告消息:在.getCRSfromGridMap4(atts)中:无法处理CRS的以下部分: epsg_code = EPSG:4326

我得到不同的结果(1月1级为0.5),而我的同事1月1级为1.4)。我的错误是由于上述警告引起的吗?

#this works
Nit_Jan <- brick("~woa18_all_n01_01.nc", stopIfNotEqualSpaced =    
FALSE, varname = "n_an", level = 1)

#this doesn't
Nit_Jan <- brick("~woa18_all_n01_01.nc", stopIfNotEqualSpaced = 
FALSE, varname = "n_an", level = 1:43)

Warning messages:
1: In if (level <= 0) { :
the condition has length > 1 and only the first element will be used 
2: In if (oldlevel != level) { :
the condition has length > 1 and only the first element will be used
3: In .getCRSfromGridMap4(atts) : cannot process these parts of the   
CRS:epsg_code=EPSG:4326

我想按深度绘制硝酸盐

1 个答案:

答案 0 :(得分:0)

这里有些混乱,因为文件具有“级别”(第四维),但是级别数是一个(因此没有第四维)。该代码可能应该检测到这一点,但是现在您必须添加lvar=4才能获得所需的对象。

library(raster)
f <- "woa18_all_n01_01.nc"
b <- brick(f, var="n_oa", lvar=4)
b
#class      : RasterBrick 
#dimensions : 180, 360, 64800, 43  (nrow, ncol, ncell, nlayers)
#resolution : 1, 1  (x, y)
#extent     : -180, 180, -90, 90  (xmin, xmax, ymin, ymax)
#crs        : +proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0 
#source     : woa18_all_n01_01.nc 
#names      : X0, X5, X10, X15, X20, X25, X30, X35, X40, X45, X50, X55, X60, X65, X70, ... 
#meters     : 0, 800 (min, max)
#varname    : n_oa 
#level      : 1 

现在您可以做

pt <- cbind(121.5, 27.5)
e <- extract(b, pt)
e[1:5]
#[1] 10.43725 10.37617 10.23662 13.76292 13.65862

警告#3

  

3:在.getCRSfromGridMap4(atts)中:无法处理CRS的这些部分:epsg_code = EPSG:4326

可以忽略;但我会在下一版本中修复。我认为这里最好的是

crs(b) <- "+init=EPSG:4326"

PS:development version of raster现在表现更好:

f <- "woa18_all_n01_01.nc"
brick(f, var="n_oa")
#class      : RasterBrick 
#dimensions : 180, 360, 64800, 43  (nrow, ncol, ncell, nlayers)
#resolution : 1, 1  (x, y)
#extent     : -180, 180, -90, 90  (xmin, xmax, ymin, ymax)
#crs        : +init=EPSG:4326 +proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0 
#source     : woa18_all_n01_01.nc 
#names      : X0, X5, X10, X15, X20, X25, X30, X35, X40, X45, X50, X55, X60, X65, X70, ... 
#depth (meters): 0, 800 (min, max)
#varname    : n_oa 
#level      : 1