使用R的terra包提取多NetCDF海面密度点数据报错求助
从Copernicus海面密度NetCDF提取点数据时类型不兼容报错
数据说明
从哥白尼网站获取了2012-2024年的MULTIOBS_GLO_PHY_S_SURFACE_MYNRT_015_013每日海面密度数据,因单次下载限制最多2年,得到5个.nc文件。
预期目标
从2012-2024年的NetCDF文件中,提取野外调查特定日期的点数据,并将数值作为列插入到自有数据框中。
报错信息
运行选择海面密度变量的代码时,出现类型不兼容错误:
Error: Not compatible with requested type: [type=character; target=double].
此前用完全相同的方法从Lm3 AQUA MODIS文件提取叶绿素a和海表温度点数据成功,无法定位海面密度处理的问题,因数据所有权限制无法分享自有数据框。
代码实现
读取所有5个NetCDF文件
# SS1:2012年1月1日至2014年12月31日 sss1 <- terra::rast("~/Documents/cmems_obs-mob_glo_phy-sss_my_multi_P1D_1729236771868.nc") plot(sss1) sss1 <- subset(sss1, 1:1096) # SS2:2015年1月1日至2017年12月31日 ss2 <- terra::rast("~/Documents/cmems_obs-mob_glo_phy-sss_my_multi_P1D_1729236939325.nc") # 仅提取海面密度的子集 ss2 <- subset(ss2, 1:1096) # SS3:2018年1月1日至2020年12月31日 ss3 <- terra::rast("~/Documents/cmems_obs-mob_glo_phy-sss_my_multi_P1D_1729237129644.nc") # 仅提取海面密度的子集 ss3 <- subset(ss3, 1:1096) # SS4:2021年1月1日至2023年12月16日 ss4 <- terra::rast("~/Documents/cmems_obs-mob_glo_phy-sss_my_multi_P1D_1729252813869.nc") # 仅提取海面密度的子集 ss4 <- subset(ss3, 1:1080) # SS5:2023年12月17日至2024年10月12日 ss5 <- terra::rast("~/Documents/cmems_obs-mob_glo_phy-sss_nrt_multi_P1D_1729253007917.nc") # 仅提取海面密度的子集 ss5 <- subset(ss3, 1:301)
合并所有子集文件
total_sss <- c(sss1, ss2, ss3, ss4, ss5)
提取点数据
# 从NetCDF文件中选择海面密度变量 SSSs <- terra::rast(total_sss, "dos") # 将数据框转换为CRS为4326的sf类空间对象 Ds_Points <- st_as_sf(x=MyDf, coords = c("Longitude_E_DD", "Latitude_N_DD"), crs = 4326) # 从NetCDF文件中提取海面密度值 SSSs_Data <- terra::extract(SSSs, Ds_Points) # 用cbind函数将海面密度结果添加到数据框 MyDf <- cbind(MyDf, SSS = SSSs_Data$dos)
栅格对象信息
total_sss 信息
class : SpatRaster dimensions : 189, 154, 4669 (nrow, ncol, nlyr) resolution : 0.125, 0.125 (x, y) extent : 28.75, 48, 8.625, 32.25 (xmin, xmax, ymin, ymax) coord. ref. : lon/lat WGS 84 sources : cmems_obs-mob_glo_phy-sss_my_multi_P1D_1729236771868.nc:dos (1096 layers) cmems_obs-mob_glo_phy-sss_my_multi_P1D_1729236939325.nc:dos (1096 layers) cmems_obs-mob_glo_phy-sss_my_multi_P1D_1729237129644.nc:dos (1096 layers) ... and 2 more source(s) varnames : dos (Sea surface density) dos (Sea surface density) dos (Sea surface density) ... names : dos_d~=-0_1, dos_d~=-0_2, dos_d~=-0_3, dos_d~=-0_4, dos_d~=-0_5, dos_d~=-0_6, ... unit : kg/m3, kg/m3, kg/m3, kg/m3, kg/m3, kg/m3, ... time : 2012-01-01 to 2020-12-31 UTC
sss1 信息
class : SpatRaster dimensions : 189, 154, 1096 (nrow, ncol, nlyr) resolution : 0.125, 0.125 (x, y) extent : 28.75, 48, 8.625, 32.25 (xmin, xmax, ymin, ymax) coord. ref. : lon/lat WGS 84 source : cmems_obs-mob_glo_phy-sss_my_multi_P1D_1729236771868.nc:dos varname : dos (Sea surface density) names : dos_d~=-0_1, dos_d~=-0_2, dos_d~=-0_3, dos_d~=-0_4, dos_d~=-0_5, dos_d~=-0_6, ... unit : kg/m3, kg/m3, kg/m3, kg/m3, kg/m3, kg/m3, ... time : 2012-01-01 to 2014-12-31 UTC
内容的提问来源于stack exchange,提问作者Alice Hobbs
相关产品推荐
相关产品推荐

