微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 terra 包的 SpatRaster 和向量之间的数学运算

如何解决使用 terra 包的 SpatRaster 和向量之间的数学运算

我有一个关于app()家庭功能的简单问题

我想将一个向量(n 个值)除以一个栅格并得到 n 个结果栅格

s <- rast(system.file("ex/logo.tif",package="terra"))[[1]] 

lapp(s,aa = c(1,10,100,1000),function(x,aa){0.46 * aa/(x + 1)})

同样想知道要使用 SpatRasterDataset 来完成。这可能吗?

这是一个例子:

fun = function(i,j) { 
    v <- c(1,1000)
    f <- i + j
    v / f
}
srd <- sds(list(i = s,j = s/10))
r <- lapp(srd,fun = fun,recursive = TRUE )

解决方法

您可以这样做(使用稍微修改的示例,以便更容易地看到发生了什么):

library(terra)
s <- rast(ncols=10,nrows=10)
s <- init(s,1:10)
v <- c(1,10,100,1000)    
a <- app(s,function(x,aa){ sapply(aa,function(i) 2 * i/x) },aa=v)
a
#class       : SpatRaster 
#dimensions  : 10,3  (nrow,ncol,nlyr)
#resolution  : 36,18  (x,y)
#extent      : -180,180,-90,90  (xmin,xmax,ymin,ymax)
#coord. ref. : +proj=longlat +datum=WGS84 +no_defs 
#source      : memory 
#names       : lyr.1,lyr.2,lyr.3 
#min values  :   0.2,2.0,20.0 
#max values  :     2,20,200 

使用 terra 版本 1.3-17(当前为开发版本),您现在还可以:

b <- 2 * v/s

得到相同的结果。当使用比层数长的向量进行算术时,SpatRaster 的层会被回收。

使用 SpatRasterDataSet,您可以执行以下操作。在 fun 之外测试 lapp 以查看返回的值的数量及其顺序是否有意义,这一点很重要。

fun = function(i,j) { 
    v <- c(1,1000)
    f <- i + j
    f <- rep(f,each=length(v))
    matrix(v / f,ncol=length(v),byrow=TRUE)
}
srd <- sds(list(i = s,j = s/10))
r <- lapp(srd,fun = fun)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?