R包rredlist查询物种遇错误,如何返回NA而非报错?
批量查询IUCN物种状态:处理未找到物种的报错问题
当批量调用rl_species_latest时,若存在无法匹配的物种,API请求会直接抛出错误导致流程中断。要实现“未找到时返回NA”的需求,可通过逐个查询+错误捕获的方式解决:
步骤1:准备环境与数据
# 安装并加载rredlist包(若未安装) # remotes::install_github("ropensci/rredlist") library(rredlist) # 定义待查询的属和种向量 genus <- c("Branta", "Branta", "Branta", "Branta", "Branta", "Anser", "Anser", "Anser", "Anser", "Anser", "Anser") sp <- c("bernicla", "ruficollis", "canadensis", "leucopsis", "hutchinsii", "rossii", "caerulescens", "anser", "fabalis", "brachyrhynchus", "serrirostris")
步骤2:编写带错误捕获的批量查询函数
# 自定义函数:单个物种查询+错误处理 get_iucn_status <- function(genus_vec, sp_vec) { # 遍历每一对属和种,返回字符向量 purrr::map2_chr(genus_vec, sp_vec, function(g, s) { tryCatch( expr = { # 正常查询逻辑 res <- rl_species_latest(g, s) res$red_list_category$description$en }, error = function(e) { # 捕获任何错误,返回NA NA_character_ } ) }) } # 执行批量查询 status_results <- get_iucn_status(genus, sp) print(status_results)
关键说明
- 使用
purrr::map2_chr确保属和种一一对应,逐个处理每个物种 tryCatch块会捕获查询过程中的所有错误(包括物种未找到、API请求失败等),并在对应位置返回NA- 最终结果向量长度与输入的属/种向量一致,不会因单个物种查询失败而中断整个流程
内容的提问来源于stack exchange,提问作者luciano
相关产品推荐
相关产品推荐

