光栅 R 之间的差异

Difference between raster R

我有两个光栅对象

> x1
class       : RasterLayer 
dimensions  : 36, 72, 2592  (nrow, ncol, ncell)
resolution  : 1.35, 1.291667  (x, y)
extent      : -97.2, 0, 20, 66.5  (xmin, xmax, ymin, ymax)
coord. ref. : NA 
data source : in memory
names       : layer 
values      : -9.527037, 15.03242  (min, max)

> x2
class       : RasterLayer 
dimensions  : 36, 72, 2592  (nrow, ncol, ncell)
resolution  : 1.351389, 1.333333  (x, y)
extent      : -97.3, 0, 20, 68  (xmin, xmax, ymin, ymax)
coord. ref. : NA 
data source : in memory
names       : layer 
values      : -5, 5  (min, max)

我想创建一个差异光栅。然而,当我尝试

x <- Reduce("-",list(x1,x2))

我收到这个错误

Error in compareRaster(e1, e2, extent = FALSE, rowcol = FALSE, crs = TRUE, : different origin

有人可以帮忙吗?

您需要对两个 RasterLayer 对象之一重新采样,使两者具有相同的范围和分辨率。 (虽然在很多情况下你真的应该回到你的管道中并确保从一开始就是这种情况)。你可以这样做:

library(raster)
# example data
x1 <- raster(xmn=-97.2, xmx=0, ymn=20, ymx=66.5, nrow=36, ncol=72)
x2 <- raster(xmn=-97.3, xmx=0, ymn=20, ymx=68, nrow=36, ncol=72)
values(x1) <- runif(ncell(x1))
values(x2) <- sample(-5:5, ncell(x2), replace=TRUE)

x1b <- resample(x1, x2)
dif <- x2 - x1b

使用resample是不得已的功能。如果两个图层的原点和分辨率相同,但范围不同,则可以使用 crop。在范围相同但分辨率不同的情况下,您可以使用 (dis)aggregate。有时 crop(dis)aggregate 的组合是最好的。