如何将 R 中的列表转换为栅格?

问题描述

我想将我拥有的列表转换为栅格,以便我提取特定位置的数据。

#create example data
tmintest=array(1:100,c(30,189,420))

#create example list
Variable <- list(Varname="Tmin")
Data = tmintest
xyCoords <- list(x = seq(-40.37,64.37,length.out=420),y = seq(25.37,72.37,length.out=189))
Dates <- list(start = seq(as.Date("2036-01-01"),as.Date("2065-01-01"),by="years"),end=seq(as.Date("2036-12-31"),as.Date("2065-12-31"),by="years"))
All <- list(Variable = Variable,Data=Data,xyCoords=xyCoords,Dates=Dates)

我从光栅文档中看到它不接受列表,所以我尝试取消列出 All

unlistAll<-unlist(All)
raster(unlistAll)

返回:

Error in .local(.Object,...) 

所以,我将使用上面列表中的信息从头开始创建它:

myraster<-raster(nrows=108,ncols=21,xmn=-40.375,xmx=64.375,ymn=25.375,ymx=72.375,vals=All$Data)

但我得到了错误

Error in setValues(r,vals) : values must be a vector

我是不是用错了方法?我只想从我的列表或栅格中提取特定 x/y 坐标的数据。

解决方法

获取范围:

xy <- cbind(x=rep(x,length(y)),rep(y,each=length(x)))
r <- rasterFromXYZ(xy)

创建一个 RasterBrick 并设置范围

b <- brick(tmintest)
extent(b) <- extent(r)

你是如何得到这些值的?如果您从 ncdf 文件中读取它们,则只需 brick(filename)