r - 将 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()
转换?先感谢您。
解决方案
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))
推荐阅读
- oracle - 如何在plSQL中将序列添加到主键
- python - python:如何将 p 值重要性添加到 barplot
- bash - Bash 版本不支持选项 local -n
- sms - Orange API 短信是否向 Etisalat 和 Vodafone 发送消息?
- python - 将一个numpy数组附加到python列表
- android - 出现错误预期 BEGIN_ARRAY 但在第 1 行第 2 列路径 $ BEGIN_OBJECT
- python - 为什么 sys.exit() 不忽略全局参数?
- c# - 信号量 - 使用信号量运行得更快的任务
- regex - 寻找围绕任何字符之一的任何字符,包括它自己
- c# - 加快在c#中导入txt文件的速度