【问题标题】:How do you load multiple rasters in [r] using a for loop?如何使用 for 循环在 [r] 中加载多个栅格?
【发布时间】:2020-05-10 06:38:59
【问题描述】:

我正在尝试使用引用列表的循环加载 144 个栅格 (.tif),但遇到了错误。请注意,我的目录中只有这 144 个 .tif 文件,并且每个文件名的某些部分都是唯一的。我不确定如何最好地为此创建一个最小可重现的示例,所以我缩写了目录和文件名。

首先我加载了“光栅”包并设置了我的工作目录, 然后我还设置了一个变量“路径”等于我的工作目录。 接下来,我创建了目录中的文件列表

setwd("T:/sample/geotiffs")
path<-"T:/sample/geotiffs"
rastlist <- list.files(path=path, pattern='tif$', full.names=TRUE)

我尝试使用上一篇文章中的语法编写代码:File not found in R raster loop

for (jj in 1:length(mget(rastlist)))  {
  x[jj] <- raster(paste0(rastlist[jj]))
}

但是,我收到以下关于缺少第一个文件的错误: “错误:‘T:/sample/geotiffs/geotiff1.tif’的值未找到”

我也试过这样编码,不用mget()和paste0(),

x<-vector(mode="logical",length=144)
for(i in 1:length(rastlist))  {
  x[i]<-raster(rastlist[i])
}

但是,我收到 50 多个警告“1:在 x[i]

有什么想法吗?运行此代码后,我的向量 x 似乎是一个包含 144 个随机整数的向量,我不知道为什么 - 也许我需要一种更好的方法来启动一个长度等于我的 rastlist 的空白向量“x”?

【问题讨论】:

  • foo &lt;- lapply(rastlist, raster) 怎么样?
  • 我认为该错误可能是由于您无法将栅格对象保存在矢量中(我认为这与栅格是 S4 对象这一事实有关);但是,您可以在列表中执行此操作。 @Lyngbakr 代码应该可以工作

标签: r for-loop raster


【解决方案1】:

你试过了吗:

x &lt;- purrr:map(rastlist, raster)

【讨论】:

    【解决方案2】:

    这应该可行:

    library(raster)
    f <- list.files(path=path, pattern='tif$', full.names=TRUE)
    r <- lapply(f, raster)
    

    如果栅格具有相同的范围和分辨率,您可能希望改为这样做

    s <- stack(f)
    

    【讨论】:

    • 谢谢 Robert、Lyngbakr 和 Jonathan,
    • 感谢 Robert、Lyngbakr 和 Jonathan!我看到带有 for 循环代码的帖子处理了非空间数据,所以是的,该代码可能由于处理 S4 对象而无法工作。当我使用 lapply(x,raster) 方法时,我得到一个看起来正确的长列表。但是,我想根据名称部分(模式=)从列表中选择元素(单个栅格)。当我尝试 attr(allrasters,"names") 时,我得到一个 NULL。有什么方向可以指点我吗?
    • 这是一个不同的问题。你可以做i &lt;- grep(pattern, f)
    • 谢谢罗伯特,我尝试了 grep(),但它产生了一个与我试图访问的向量子集相关的数字向量。我不确定如何使用它。我找到了一个需要更多代码输入的解决方法,但会起作用,如果你有时间,请参阅我发布的下一个问题:stackoverflow.com/questions/59904916/…
    • 罗伯特,你是对的,我可以使用 grep() 在加载后根据名称中的通配符提取栅格,我偶然发现“R for Dummies”中的子集信息提醒了我这样做,我以前没有这样想: allrasters[grep("BLUE",allrasters)] 感谢您的指点!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-05
    • 2021-07-11
    • 2018-05-08
    • 2021-09-07
    • 2016-08-27
    • 2021-11-07
    • 1970-01-01
    相关资源
    最近更新 更多