使用terra::subset筛选匹配栅图层,如何忽略不存在的图层名?
解决terra::subset()匹配不存在图层名报错的问题
要实现仅返回与指定名称匹配的图层、忽略不存在名称的需求,核心思路是先筛选出目标名称中实际存在于栅格对象的名称,再将筛选后的有效名称传入subset()函数。
具体代码示例如下:
library(terra) r1 <- rast(matrix(1:100, nrow=10, ncol=10)) r2 <- rast(matrix(200:101, nrow=10, ncol=10)) r3 <- rast(matrix(c(2,200), nrow=10, ncol=10)) s <- c(r1,r2,r3) names(s) <- c("A","B","C") # 定义要匹配的目标图层名 target_names <- c("A", "D") # 筛选出其中存在于栅格对象的有效名称 valid_names <- target_names[target_names %in% names(s)] # 基于有效名称提取子集 s2 <- subset(s, valid_names) print(s2)
运行后会得到仅包含图层"A"的栅格对象,不会触发"invalid name(s)"错误。
你也可以用intersect()函数替代%in%筛选,效果一致:
valid_names <- intersect(target_names, names(s))
内容的提问来源于stack exchange,提问作者Kevin
相关产品推荐
相关产品推荐

