【问题标题】:Resampling multiple rasters with a for loop使用 for 循环重新采样多个栅格
【发布时间】:2021-07-05 18:45:57
【问题描述】:

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

(函数(类,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')
}

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

【问题讨论】:

    标签: r loops raster resampling terra


    【解决方案1】:

    你犯了以下错误

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

    下面的作品

    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

    library(terra)
    rr <- lapply(ff, rast)
    standard <- rr[[1]]
    
    rs <- list(standard)
    for (i in 2:length(rr)) {
        rs[[i]] <- resample(rr[[i]], standard, method='bilinear')
    }
    
    s <- rast(rs)
    

    【讨论】:

    • 感谢您的建议!我解决了
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-10
    • 1970-01-01
    • 1970-01-01
    • 2021-02-25
    • 1970-01-01
    • 2016-08-27
    • 1970-01-01
    相关资源
    最近更新 更多