如何使用 terra 删除 SpatRaster 的图层?

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

我正在运行包含 1950-2014 年数据的多个数据集的循环。我的 SpatRaster 也跨越了这个时间段,有 65 个图层。我意识到我的一些数据集缺少多年的数据(例如只有 63 年的数据),导致我的循环出现错误。我现在已经进行了设置,以便在循环中识别缺失的年份和相应的层,如下所示:

# Identify any years with missing data and skip these layers of "temperature_raster" in the loop
  missing_years <- setdiff(seq(1950, 2014), unique(df$year))
  # Determine the layers corresponding to the missing years
  missing_layers <- which(seq(1950, 2014) %in% missing_years)

我现在想修改我的“Temperature_rasters”以删除与存储在矢量对象“missing_layers”中的图层相对应的图层。如果可能的话,我想使用 terra 包来完成此操作。

最初我尝试将其集成到循环中,如下所示:

for (l in setdiff(1:nlyr(temperature_rasters), missing_layers)) {
  # rest of loop
}

当这不起作用时,我想在循环中使用栅格之前直接修改栅格,如下所示:

temperature_rasters <- temperature_rasters[-c(missing_layers)] 

但这也不起作用。

r raster terra
1个回答
0
投票

我不太习惯

terra
,但我认为 SpatRaster 对象可能有多个层,我们可以用名称(字符串)来调用。

很难理解图层名称是否是代表年份的字符串(例如

"1950"
),但我会假设。我的建议是使用逻辑向量来验证缺失的年份是否在年份字符串向量中。 all_years = seq(1950, 1958) all_years_char = as.character(all_years) missing_years <- c( 1953, 1954) missing_layers <- as.character(missing_years) year_to_read <- all_years_char[!all_years_char %in% missing_layers]

所以你可以使用

for (l in year_to_read) { # rest of loop }

应提供额外信息。

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