r - r ncdf4 "我找不到请求的变量!"
问题描述
我收到“找不到请求的 var”错误,即使变量名是有效的 - 它适用于其他 netcdf 库 - 包括 NCO、R netcdf4 库和 Panoply:
此示例使用名为test2.nc的文件:
这按预期工作:
library(ncdf4)
nc <- nc_open('test2.nc')
v <- ncvar_get(nc, 'biomass')
image(v)
nc_close(nc)
这不起作用:
library(raster)
r <- raster('test2.nc', 'biomass')
#> Loading required namespace: ncdf4
#> [1] "vobjtovarid4: error #F: I could not find the requsted var (or dimvar) in the file!"
#> [1] "var (or dimvar) name: crs"
#> [1] "file name: test2.nc"
#> Warning in .rasterObjectFromCDF(x, type = objecttype, band = band, ...): NAs
#> introduced by coercion
#> Error in if (band > nbands(r)) {: missing value where TRUE/FALSE needed
由reprex 包于 2021-06-11 创建 (v2.0.0 )
会话信息sessioninfo::session_info()
#> - Session info ---------------------------------------------------------------
#> setting value
#> version R version 4.0.2 (2020-06-22)
#> os Windows 10 x64
#> system x86_64, mingw32
#> ui RTerm
#> language (EN)
#> collate English_United States.1252
#> ctype English_United States.1252
#> tz America/Phoenix
#> date 2021-06-11
#>
#> - Packages -------------------------------------------------------------------
#> package * version date lib source
#> assertthat 0.2.1 2019-03-21 [1] CRAN (R 4.0.2)
#> backports 1.2.1 2020-12-09 [1] CRAN (R 4.0.3)
#> cli 2.3.1 2021-02-23 [1] CRAN (R 4.0.4)
#> codetools 0.2-16 2018-12-24 [2] CRAN (R 4.0.2)
#> crayon 1.4.1 2021-02-08 [1] CRAN (R 4.0.2)
#> digest 0.6.27 2020-10-24 [1] CRAN (R 4.0.3)
#> ellipsis 0.3.1 2020-05-15 [1] CRAN (R 4.0.2)
#> evaluate 0.14 2019-05-28 [1] CRAN (R 4.0.2)
#> fansi 0.4.2 2021-01-15 [1] CRAN (R 4.0.3)
#> fs 1.5.0 2020-07-31 [1] CRAN (R 4.0.3)
#> glue 1.4.2 2020-08-27 [1] CRAN (R 4.0.2)
#> highr 0.8 2019-03-20 [1] CRAN (R 4.0.2)
#> htmltools 0.5.1.1 2021-01-22 [1] CRAN (R 4.0.3)
#> knitr 1.31 2021-01-27 [1] CRAN (R 4.0.3)
#> lattice 0.20-41 2020-04-02 [2] CRAN (R 4.0.2)
#> lifecycle 1.0.0 2021-02-15 [1] CRAN (R 4.0.4)
#> magrittr 2.0.1 2020-11-17 [1] CRAN (R 4.0.3)
#> ncdf4 1.17 2019-10-23 [1] CRAN (R 4.0.0)
#> pillar 1.5.1 2021-03-05 [1] CRAN (R 4.0.4)
#> pkgconfig 2.0.3 2019-09-22 [1] CRAN (R 4.0.2)
#> purrr 0.3.4 2020-04-17 [1] CRAN (R 4.0.2)
#> raster * 3.4-5 2020-11-14 [1] CRAN (R 4.0.3)
#> Rcpp 1.0.6 2021-01-15 [1] CRAN (R 4.0.3)
#> reprex 2.0.0 2021-04-02 [1] CRAN (R 4.0.5)
#> rgdal 1.5-23 2021-02-03 [1] CRAN (R 4.0.3)
#> rlang 0.4.10 2020-12-30 [1] CRAN (R 4.0.3)
#> rmarkdown 2.7 2021-02-19 [1] CRAN (R 4.0.4)
#> sessioninfo 1.1.1 2018-11-05 [1] CRAN (R 4.0.2)
#> sp * 1.4-5 2021-01-10 [1] CRAN (R 4.0.3)
#> stringi 1.5.3 2020-09-09 [1] CRAN (R 4.0.3)
#> stringr 1.4.0 2019-02-10 [1] CRAN (R 4.0.2)
#> styler 1.3.2 2020-02-23 [1] CRAN (R 4.0.2)
#> tibble 3.1.0 2021-02-25 [1] CRAN (R 4.0.4)
#> utf8 1.2.1 2021-03-12 [1] CRAN (R 4.0.5)
#> vctrs 0.3.6 2020-12-17 [1] CRAN (R 4.0.3)
#> withr 2.4.1 2021-01-26 [1] CRAN (R 4.0.3)
#> xfun 0.20 2021-01-06 [1] CRAN (R 4.0.3)
#> yaml 2.2.1 2020-02-01 [1] CRAN (R 4.0.2)
#>
#> [1] C:/Users/David/Documents/lib/R
#> [2] C:/Program Files/R/R-4.0.2/library
解决方案
您可以从包中尝试该rast
功能。terra
它创建一个SpatRaster
对象。您可以raster
使用该raster
函数将对象转换为更高版本。但是,您想在raster
包中使用的大多数功能可能都可以通过使用terra
包来实现。所以留在SpatRaster
课堂上可能没问题。
library(terra)
library(ncdf4)
library(raster)
r <- rast("test2.nc")
r
# class : SpatRaster
# dimensions : 72, 120, 1 (nrow, ncol, nlyr)
# resolution : 0.04166667, 0.04166667 (x, y)
# extent : -115, -110, 30, 33 (xmin, xmax, ymin, ymax)
# coord. ref. : +proj=longlat +datum=WGS84 +no_defs
# source : test2.nc
# varname : biomass (biomass)
# name : biomass
# unit : Mg ha-1 y-1
r2 <- raster(r)
r2
# class : RasterLayer
# dimensions : 72, 120, 8640 (nrow, ncol, ncell)
# resolution : 0.04166667, 0.04166667 (x, y)
# extent : -115, -110, 30, 33 (xmin, xmax, ymin, ymax)
# crs : +proj=longlat +datum=WGS84 +no_defs
# source : test2.nc
# names : biomass
# zvar : biomass
推荐阅读
- docker - 在 AWS Beanstalk 中使用私有 Docker 映像
- flutter - 有没有办法以编程方式扩展条子应用栏?
- r - 在变异管道中按组获取唯一 ID
- python - 使用特定 IP 源的 Python Paramiko SSH 脚本
- git - Jitterbit 的源代码控制/差异工具
- asp.net-core - 我有两种具有 ActionResult 返回类型的方法,但其中一种是返回单个 Employee 对象并且仍然有效。这是为什么?
- discord.js - Discord.js 试图在用户被禁止时向他们发送消息
- javascript - Javascript,Html:点击完成后执行的函数
- c# - 每次按 Enter 时,Web 浏览器地址栏都会发出 Windows Asterisk 声音
- discord.js - 为什么我的踢命令不起作用?(discord.js)