首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R栅格根据两个现有栅格构造新栅格

R栅格根据两个现有栅格构造新栅格
EN

Stack Overflow用户
提问于 2020-03-24 04:54:17
回答 1查看 31关注 0票数 0

我需要基于以下逻辑构造一个新的栅格(称为ch,基于两个栅格(称为tmintmax) )。新栅格的每个元素都遵循此逻辑。tmin, tmaxch都是尺寸相同的光栅砖块,但我想我应该先试验一下单层。

代码语言:javascript
复制
if (tmin > 7) ch <- 0
if (tmax < 7) ch <- 24
else
ch <- (7 - tmin)/(tmax - tmin)

我试着用下面的代码遵循这个answer的逻辑。正如预期的那样,testout由0或24组成。我不知道如何把逻辑的最后一部分放到这个过程中。

代码语言:javascript
复制
library(raster)
r1 <- raster()
r2 <- raster()
set.seed(10)
values(r1) <- runif(ncell(r1), min = 0, max = 10)
values(r2) <- runif(ncell(r2), min = 0, max = 10)

myFun <- function(r1, r2) {
  0*(r1 > 7)+
  24*(r2 < 7)  
}

testout <- myFun(r1, r2)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-24 12:51:19

示例数据

代码语言:javascript
复制
library(raster)
r1 <- r2 <- raster(ncol=10, nrow=10)
set.seed(10)
values(r1) <- runif(ncell(r1), min = 0, max = 10)
values(r2) <- runif(ncell(r2), min = 0, max = 10)

矢量化函数

代码语言:javascript
复制
myFun <- function(tmin, tmax) {
    ch <- (7 - tmin)/(tmax - tmin)
    ch[tmin > 7] <- 0
    ch[tmax < 7 & tmin <= 7] <- 24
    ch
}

ch1 <- overlay(r1, r2, fun=myFun)

未记录的替代方案

代码语言:javascript
复制
ifel <- raster:::.ifel
ch2 <- ifel(r1 > 7, 0, ifel(r2 < 7, 24, (7 - r1)/(r2 - r1)))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60821389

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档