【发布时间】:2016-12-03 05:24:26
【问题描述】:
我有两个相同范围的环境栅格等,以及模型结果的数据框(其中包含 env1 和 env2 的所有可能组合)。我正在尝试创建第三个栅格,其中填充了每个单元格的模型结果。
library(raster)
## Mock env rasters
env.param1 <- seq(1:100)
env.param2 <- seq(101:200)
ext <- extent(1,10,1,10)
env1 <- raster(ext,nrow=10,ncol=10)
values(env1) <- env.param1
env2 <- raster(ext,nrow=10,ncol=10)
values(env2) <- env.param2
## Mock model results
param.set <- expand.grid(env.param1,env.param2)
res.v <- seq(10001:20000)
res <- cbind(param.set, res.v)
res.rast <- raster(ext, nrow=10, ncol=10)
##
for(i in 1:ncell(env1)){
res.rast[i] <- res[which(res$Var1==env1[i] & res$Var2==env2[i]),"res.v"]
}
这似乎可行,但是当env* 中的值没有出现在res 中时它会失败,这将发生在我的实际数据集中。我想出了一个解决方案,但它似乎很慢。
for(i in 1:ncell(env1)){
res.rast[i] <-res[which(ifelse(abs(res$Var1-env1[i])==min(abs(res$Var1-env1[i])),TRUE,FALSE)
& ifelse(abs(res$Var2-env2[i])==min(abs(res$Var2-env2[i])),TRUE,FALSE)),"res.v"]
}
有没有办法将其优化为 A)在我使用更高分辨率 env* 栅格时提高速度(我有一个新数据集,其分辨率比旧数据集高 225 倍)? B) 当我开始在我的分析中包含更多参数时,我该如何扩展。
【问题讨论】:
标签: r performance logical-operators r-raster