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

使用 for 循环重采样多个栅格

如何解决使用 for 循环重采样多个栅格

我试图在列表中的一些栅格上循环重采样函数,以便它们的尺寸、范围和分辨率与列表中的第一个栅格相匹配。但我不断收到以下错误

函数(类,fdef,mtable)中的错误: 无法为签名“list”、“RasterLayer”找到函数“resample”的继承方法

下面是我的代码

library(raster)
rastlist <- list.files(path = ".",pattern='.tif$',all.files=T,full.names=F)
allrasters <- lapply(rastlist,raster)
nrasters <- length(allrasters)
raster_standard <- allrasters[[1]]
r<-allrasters[i]
for (i in 1:nrasters) {
rs<-resample(r,raster_standard,method='bilinear')
}

我发现了一些类似的主题,但我认为我不会犯同样的错误,所以我不确定这些解决方案是否会对我有所帮助。您能提供的任何帮助将不胜感激。

解决方法

你犯了以下错误

  1. 您在 for 循环之外使用了 allrasters[i]
  2. 您需要使用双括号从列表中提取某些内容,如 allrasters[[i]] --- 使用单括号将生成您报告的错误消息,就像您尝试将 resample 与 { {1}} 而不是 list
  3. 在循环内部,您覆盖相同的变量 RasterLayer,因此您最好只执行最后一次迭代。相反,将栅格添加到列表中
  4. 您使用自身对第一个栅格进行了重新采样。这不是错误,但毫无意义

下面的作品

rs

为了更快地重采样,您可以尝试library(raster) #ff <- list.files(pattern='\\.tif$') # to make this reproducible f <- system.file("external/test.grd",package="raster") ff <- rep(f,3) rr <- lapply(ff,raster) standard <- rr[[1]] rs <- list(standard) for (i in 2:length(rr)) { rs[[i]] <- resample(rr[[i]],standard,method='bilinear') } s <- stack(rs)

terra

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 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”。这是什么意思?