在 R 中堆叠 20 个不同范围的栅格
Stacking 20 rasters with different extents in R
我有 20 个栅格存储在一个名为 allrasters 的列表中。它们有不同的程度(见下文)。我想堆叠它们,所以首先我使用 lapply 将所有列表项裁剪到最小范围的栅格 - 第 10 个列表项。
library(raster)
rastlist <- list.files(path = "C:/Users/bhauptman/Box/Ch2/R/data/tif_shp", pattern='.tif$', all.files=TRUE, full.names=T)
allrasters <- lapply(rastlist, raster)
crop_allrasters <-lapply(allrasters, FUN = crop, allrasters[[10]])
它运行了,但是当我检查它们现在是否都具有相同的范围时,没有:
compareRaster(crop_allrasters)
>Error in compareRaster(crop_allrasters) : different extent
这是20个栅格的原始范围:
> extent(allrasters[[1]])
class : Extent
xmin : -223287.4
xmax : 122512.6
ymin : -340387.9
ymax : 298012.1
> extent(allrasters[[2]])
class : Extent
xmin : -459600.8
xmax : 335249.2
ymin : -503894.5
ymax : 449855.5
> extent(allrasters[[3]])
class : Extent
xmin : -459600.8
xmax : 335249.2
ymin : -503894.5
ymax : 449855.5
> extent(allrasters[[4]])
class : Extent
xmin : -260723.4
xmax : 150713.8
ymin : -350863.2
ymax : 305266.8
> extent(allrasters[[5]])
class : Extent
xmin : -260740.3
xmax : 150709.6
ymin : -350843.9
ymax : 305286.1
> extent(allrasters[[6]])
class : Extent
xmin : -223300
xmax : 129000
ymin : -344600
ymax : 298550
> extent(allrasters[[7]])
class : Extent
xmin : -223300
xmax : 129000
ymin : -344600
ymax : 298550
> extent(allrasters[[8]])
class : Extent
xmin : -223300
xmax : 129000
ymin : -344600
ymax : 298550
> extent(allrasters[[9]])
class : Extent
xmin : -223300
xmax : 129000
ymin : -344600
ymax : 298550
> extent(allrasters[[10]])
class : Extent
xmin : -223300
xmax : 129000
ymin : -344600
ymax : 298550
> extent(allrasters[[11]])
class : Extent
xmin : -223300
xmax : 129000
ymin : -344600
ymax : 298550
> extent(allrasters[[12]])
class : Extent
xmin : -223300
xmax : 129000
ymin : -344600
ymax : 298550
> extent(allrasters[[13]])
class : Extent
xmin : -223300
xmax : 129000
ymin : -344600
ymax : 298550
> extent(allrasters[[14]])
class : Extent
xmin : -223300
xmax : 129000
ymin : -344600
ymax : 298550
> extent(allrasters[[15]])
class : Extent
xmin : -421253.8
xmax : 293346.2
ymin : -463338.6
ymax : 411561.4
> extent(allrasters[[16]])
class : Extent
xmin : -421253.8
xmax : 293346.2
ymin : -463338.6
ymax : 411561.4
> extent(allrasters[[17]])
class : Extent
xmin : -260776
xmax : 150724
ymin : -350868.1
ymax : 305331.9
> extent(allrasters[[18]])
class : Extent
xmin : -260776
xmax : 150724
ymin : -350868.1
ymax : 305331.9
> extent(allrasters[[19]])
class : Extent
xmin : -260776
xmax : 150724
ymin : -350868.1
ymax : 305331.9
> extent(allrasters[[20]])
class : Extent
xmin : -260776
xmax : 150724
ymin : -350868.1
ymax : 305331.9
原则上应该可行,此处使用一些示例数据和 terra
而不是 raster
进行说明
library(terra)
f <- system.file("ex/elev.tif", package="terra")
x = list(r, r, crop(r, c(5,6,49,50)))
y = lapply(x, crop, y=x[[3]])
sapply(x, \(i) as.vector(ext(i))) |> t()
# xmin xmax ymin ymax
#[1,] 5.741667 6.533333 49.44167 50.19167
#[2,] 5.741667 6.533333 49.44167 50.19167
#[3,] 5.741667 6.000000 49.44167 50.00000
sapply(y, \(i) as.vector(ext(i))) |> t()
# xmin xmax ymin ymax
#[1,] 5.741667 6 49.44167 50
#[2,] 5.741667 6 49.44167 50
#[3,] 5.741667 6 49.44167 50
这似乎不适用于您所用的某些输入栅格。您可以尝试直接在这些栅格上使用 crop
来找出原因。
我有 20 个栅格存储在一个名为 allrasters 的列表中。它们有不同的程度(见下文)。我想堆叠它们,所以首先我使用 lapply 将所有列表项裁剪到最小范围的栅格 - 第 10 个列表项。
library(raster)
rastlist <- list.files(path = "C:/Users/bhauptman/Box/Ch2/R/data/tif_shp", pattern='.tif$', all.files=TRUE, full.names=T)
allrasters <- lapply(rastlist, raster)
crop_allrasters <-lapply(allrasters, FUN = crop, allrasters[[10]])
它运行了,但是当我检查它们现在是否都具有相同的范围时,没有:
compareRaster(crop_allrasters)
>Error in compareRaster(crop_allrasters) : different extent
这是20个栅格的原始范围:
> extent(allrasters[[1]])
class : Extent
xmin : -223287.4
xmax : 122512.6
ymin : -340387.9
ymax : 298012.1
> extent(allrasters[[2]])
class : Extent
xmin : -459600.8
xmax : 335249.2
ymin : -503894.5
ymax : 449855.5
> extent(allrasters[[3]])
class : Extent
xmin : -459600.8
xmax : 335249.2
ymin : -503894.5
ymax : 449855.5
> extent(allrasters[[4]])
class : Extent
xmin : -260723.4
xmax : 150713.8
ymin : -350863.2
ymax : 305266.8
> extent(allrasters[[5]])
class : Extent
xmin : -260740.3
xmax : 150709.6
ymin : -350843.9
ymax : 305286.1
> extent(allrasters[[6]])
class : Extent
xmin : -223300
xmax : 129000
ymin : -344600
ymax : 298550
> extent(allrasters[[7]])
class : Extent
xmin : -223300
xmax : 129000
ymin : -344600
ymax : 298550
> extent(allrasters[[8]])
class : Extent
xmin : -223300
xmax : 129000
ymin : -344600
ymax : 298550
> extent(allrasters[[9]])
class : Extent
xmin : -223300
xmax : 129000
ymin : -344600
ymax : 298550
> extent(allrasters[[10]])
class : Extent
xmin : -223300
xmax : 129000
ymin : -344600
ymax : 298550
> extent(allrasters[[11]])
class : Extent
xmin : -223300
xmax : 129000
ymin : -344600
ymax : 298550
> extent(allrasters[[12]])
class : Extent
xmin : -223300
xmax : 129000
ymin : -344600
ymax : 298550
> extent(allrasters[[13]])
class : Extent
xmin : -223300
xmax : 129000
ymin : -344600
ymax : 298550
> extent(allrasters[[14]])
class : Extent
xmin : -223300
xmax : 129000
ymin : -344600
ymax : 298550
> extent(allrasters[[15]])
class : Extent
xmin : -421253.8
xmax : 293346.2
ymin : -463338.6
ymax : 411561.4
> extent(allrasters[[16]])
class : Extent
xmin : -421253.8
xmax : 293346.2
ymin : -463338.6
ymax : 411561.4
> extent(allrasters[[17]])
class : Extent
xmin : -260776
xmax : 150724
ymin : -350868.1
ymax : 305331.9
> extent(allrasters[[18]])
class : Extent
xmin : -260776
xmax : 150724
ymin : -350868.1
ymax : 305331.9
> extent(allrasters[[19]])
class : Extent
xmin : -260776
xmax : 150724
ymin : -350868.1
ymax : 305331.9
> extent(allrasters[[20]])
class : Extent
xmin : -260776
xmax : 150724
ymin : -350868.1
ymax : 305331.9
原则上应该可行,此处使用一些示例数据和 terra
而不是 raster
library(terra)
f <- system.file("ex/elev.tif", package="terra")
x = list(r, r, crop(r, c(5,6,49,50)))
y = lapply(x, crop, y=x[[3]])
sapply(x, \(i) as.vector(ext(i))) |> t()
# xmin xmax ymin ymax
#[1,] 5.741667 6.533333 49.44167 50.19167
#[2,] 5.741667 6.533333 49.44167 50.19167
#[3,] 5.741667 6.000000 49.44167 50.00000
sapply(y, \(i) as.vector(ext(i))) |> t()
# xmin xmax ymin ymax
#[1,] 5.741667 6 49.44167 50
#[2,] 5.741667 6 49.44167 50
#[3,] 5.741667 6 49.44167 50
这似乎不适用于您所用的某些输入栅格。您可以尝试直接在这些栅格上使用 crop
来找出原因。