首页 > 解决方案 > 将 boot::inv.logit() 应用于 R 中的栅格

问题描述

我有一个Formal Class Raster并且我正在尝试将boot::inv.logit()函数应用于其栅格单元,例如:

r1 <- raster(nrows=25, ncols=25, vals=rtnorm(n = 625, .1, .9))
r2 <- boot::inv.logit(r1)

但是,当我尝试这样做时,它会返回一个错误:

> Error in plogis(x) : Non-numeric argument to mathematical function

如果我将栅格转换为矩阵,然后再返回栅格,它可以完成工作,但我会丢失与我一开始拥有的“正式类栅格”相关的所有其他信息,这并不理想:

r2 <- boot::inv.logit(as.matrix(r1))
r2 <- as.raster(r2)

有没有一种简单的方法可以恢复Formal Class Raster我之前的信息或将其inv.logit()应用于栅格而不进行as.matrix()转换?先感谢您。

标签: rrasterlogistic-regressionr-raster

解决方案


If you want to apply the function to the raster, use the calc method from raster:

r2 <- calc(r1,boot::inv.logit)

> r2 

# class       : RasterLayer 
# dimensions  : 25, 25, 625  (nrow, ncol, ncell)
# resolution  : 14.4, 7.2  (x, y)
# extent      : -180, 180, -90, 90  (xmin, xmax, ymin, ymax)
# coord. ref. : +proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0 
# data source : in memory
# names       : layer 
# values      : 0.07434905, 0.9498965  (min, max)

Alternatively, you can make an empty copy of r1, and just fill in the values coming out of inv.logit:

r2 <- raster(r1)
r2[] <- boot::inv.logit(as.matrix(r1))

推荐阅读