从列表创建 RasterStack

Create a RasterStack from a list

我将图像数据存储在列表中。该文件包含 1000 个列表(对应于像素),每个列表包含 44 个实体的向量。现在我想创建一个 RasterStack 数据类型,以便将此数据用于 mesma 函数。堆栈数据应该有 44 层。

example_data = replicate(1000, rnorm(44, 8, 1),simplify = FALSE)
stack(example_data, bands = 44) 

我收到以下错误消息。

Error in (function (classes, fdef, mtable)  : 
  unable to find an inherited method for function ‘raster’ for signature ‘"numeric"’

我不知道你说的 "list file" 是什么意思。我想你的意思是 "list" (如你的例子)。

让我们举一个更简单的例子。每个单元格有一个元素的列表(总共 4 个单元格)。每个元素都有一个向量(每一层一个值;有3层)

d <- replicate(4, 1:3,simplify = FALSE)
d
#[[1]]
#[1] 1 2 3
#[[2]]
#[1] 1 2 3
# etc

将其更改为矩阵,每个单元格一行

m <- matrix(unlist(d), nrow=4, byrow=TRUE)
m
#     [,1] [,2] [,3]
#[1,]    1    2    3
#[2,]    1    2    3
#[3,]    1    2    3
#[4,]    1    2    3

创建适当的 Raster* 对象

library(raster)
b <- brick(nrow=2, ncol=2, nl=3)

并赋值

values(b) <- m 
b
#class      : RasterBrick 
#dimensions : 2, 2, 4, 3  (nrow, ncol, ncell, nlayers)
#resolution : 180, 90  (x, y)
#extent     : -180, 180, -90, 90  (xmin, xmax, ymin, ymax)
#crs        : +proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0 
#source     : memory
#names      : layer.1, layer.2, layer.3 
#min values :       1,       2,       3 
#max values :       1,       2,       3