R遍历栅格对象的对象

问题描述 投票:0回答:1

我想使用循环修改某些栅格。

rasters<-list(rast1,rast2,rast3,rast4)

for(i in rasters){
  i[[1]]<-i[[1]]/10000
  i[[2]]<-(i[[2]]+100)/9000
}

当前,i成为大的栅格对象。

这里是一个示例栅格堆栈,可用于测试

library(raster)

rast1<-stack(raster(matrix(runif(100),
                           ncol = 10, byrow = TRUE)),
             raster(matrix(runif(100),
                           ncol = 10, byrow = TRUE)))
r for-loop gis lapply raster
1个回答
0
投票

我不确定这是否能正确解决您的所有目标,但是我发现您现在的工作存在基本缺陷。在R中构建for()循环时,您可能需要遍历索引值而不是对象对象的索引。对i [[1]]进行赋值时,是(a)不更改栅格对象内任何东西的值,并且(b)更改了迭代器i的值和类。

所以也许

这将更接近您的尝试(尽管您实际上并未描述定义明确的过程):
rasters<-list(rast1,rast1)
for(i in seq_along(rasters) ) {
    rasters[[i]][1]<-rasters[[i]][1]/10000
    rasters[[i]][2]<-(rasters[[i]][2]+100)/9000
}

[这将导致rasters的值具有与原始rasters对象相同的大小和形状,即两个栅格堆栈的列表。

© www.soinside.com 2019 - 2024. All rights reserved.