将 netcdf 文件提取到栅格中时出错
Error while extracting netcdf files into raster
我的文件夹中有很多 NCDF 文件。我尝试使用 raster
和 ncdf4
包将它们提取到光栅块中。如果我单独提取每个 NCDF 文件,它就可以工作。但是,我尝试使用 for 循环提取所有文件,然后出现错误。
R<-list.files("D:/Results/TimeSeries/NETCDF/")
r<-brick(paste0("D:/Results/TimeSeries/NETCDF/",R[[1]]),varname="T_min")
for(i in 2:length(R)){
r1<-brick(paste0("D:/Results/TimeSeries/NETCDF/",R[[i]]),varname="T_min")
r<-brick(r,r1)
}
Error in as.integer(nl) : cannot coerce type 'S4' to vector of type
'integer'
如果我分别查看 r
和 r1
,它们似乎具有相同的范围并且都是光栅砖类型:
> r
class : RasterBrick
dimensions : 81, 81, 6561, 122 (nrow, ncol, ncell, nlayers)
resolution : 1, 1 (x, y)
extent : 0.5, 81.5, 0.5, 81.5 (xmin, xmax, ymin, ymax)
coord. ref. : NA
data source : D:\Results\TimeSeries\NETCDF\timeseries_1km_2026.nc
names : X0026.05.02, X0026.05.03, X0026.05.04, X0026.05.05, X0026.05.06, X0026.05.07, X0026.05.08, X0026.05.09, X0026.05.10, X0026.05.11, X0026.05.12, X0026.05.13, X0026.05.14, X0026.05.15, X0026.05.16, ...
Date : 0026-05-02, 0026-08-31 (min, max)
varname : T_min
> r1
class : RasterBrick
dimensions : 81, 81, 6561, 122 (nrow, ncol, ncell, nlayers)
resolution : 1, 1 (x, y)
extent : 0.5, 81.5, 0.5, 81.5 (xmin, xmax, ymin, ymax)
coord. ref. : NA
data source : D:\Results\TimeSeries\NETCDF\timeseries_1km_2027.nc
names : X0027.05.02, X0027.05.03, X0027.05.04, X0027.05.05, X0027.05.06, X0027.05.07, X0027.05.08, X0027.05.09, X0027.05.10, X0027.05.11, X0027.05.12, X0027.05.13, X0027.05.14, X0027.05.15, X0027.05.16, ...
Date : 0027-05-02, 0027-08-31 (min, max)
varname : T_min
请帮忙。
不需要循环,raster
是向量化的,试试
p <- "D:/Results/TimeSeries/NETCDF"
R <- list.files(p, pattern = "nc$")
r <- raster::stack(file.path(p, R), varname = "T_min")
如果你确实需要循环,我会这样做:
r <- raster::stack(lapply(file.path(p, R), raster::raster, varname = "T_min"))
编辑:将 raster::raster 替换为 raster::stack。
另请注意 file.path
的使用以及 list.files
中可用的设施。 (为文件路径粘贴文本可能会有问题,并且比使用可用函数更复杂)。
我的文件夹中有很多 NCDF 文件。我尝试使用 raster
和 ncdf4
包将它们提取到光栅块中。如果我单独提取每个 NCDF 文件,它就可以工作。但是,我尝试使用 for 循环提取所有文件,然后出现错误。
R<-list.files("D:/Results/TimeSeries/NETCDF/")
r<-brick(paste0("D:/Results/TimeSeries/NETCDF/",R[[1]]),varname="T_min")
for(i in 2:length(R)){
r1<-brick(paste0("D:/Results/TimeSeries/NETCDF/",R[[i]]),varname="T_min")
r<-brick(r,r1)
}
Error in as.integer(nl) : cannot coerce type 'S4' to vector of type 'integer'
如果我分别查看 r
和 r1
,它们似乎具有相同的范围并且都是光栅砖类型:
> r
class : RasterBrick
dimensions : 81, 81, 6561, 122 (nrow, ncol, ncell, nlayers)
resolution : 1, 1 (x, y)
extent : 0.5, 81.5, 0.5, 81.5 (xmin, xmax, ymin, ymax)
coord. ref. : NA
data source : D:\Results\TimeSeries\NETCDF\timeseries_1km_2026.nc
names : X0026.05.02, X0026.05.03, X0026.05.04, X0026.05.05, X0026.05.06, X0026.05.07, X0026.05.08, X0026.05.09, X0026.05.10, X0026.05.11, X0026.05.12, X0026.05.13, X0026.05.14, X0026.05.15, X0026.05.16, ...
Date : 0026-05-02, 0026-08-31 (min, max)
varname : T_min
> r1
class : RasterBrick
dimensions : 81, 81, 6561, 122 (nrow, ncol, ncell, nlayers)
resolution : 1, 1 (x, y)
extent : 0.5, 81.5, 0.5, 81.5 (xmin, xmax, ymin, ymax)
coord. ref. : NA
data source : D:\Results\TimeSeries\NETCDF\timeseries_1km_2027.nc
names : X0027.05.02, X0027.05.03, X0027.05.04, X0027.05.05, X0027.05.06, X0027.05.07, X0027.05.08, X0027.05.09, X0027.05.10, X0027.05.11, X0027.05.12, X0027.05.13, X0027.05.14, X0027.05.15, X0027.05.16, ...
Date : 0027-05-02, 0027-08-31 (min, max)
varname : T_min
请帮忙。
不需要循环,raster
是向量化的,试试
p <- "D:/Results/TimeSeries/NETCDF"
R <- list.files(p, pattern = "nc$")
r <- raster::stack(file.path(p, R), varname = "T_min")
如果你确实需要循环,我会这样做:
r <- raster::stack(lapply(file.path(p, R), raster::raster, varname = "T_min"))
编辑:将 raster::raster 替换为 raster::stack。
另请注意 file.path
的使用以及 list.files
中可用的设施。 (为文件路径粘贴文本可能会有问题,并且比使用可用函数更复杂)。