You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 20:55:06