我有一个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()
转换?预先谢谢你。
答案 0 :(得分:1)
如果要将功能应用于栅格,请使用calc
中的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)
或者,您可以制作r1
的空副本,只需填写inv.logit
中的值:
r2 <- raster(r1)
r2[] <- boot::inv.logit(as.matrix(r1))