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

求助:在R中调用BIEN数据库获取含特殊字符的物种数据失败

解决BIEN包加载带特殊字符物种数据的问题

错误原因分析

你遇到的Arguments imply different number of rows: 0, 1错误,本质是指定物种在当前筛选条件下没有返回任何记录:BIEN_occurrence_species返回了0行的空数据框,此时occ$scrubbed_species_binomial等向量长度为0,但dataset = "BIEN"是长度1的向量,两者无法组成data.frame。

分步解决方案

1. 确认物种在BIEN库中是否存在有效记录

用BIEN_taxonomy_species验证物种名称是否匹配BIEN的分类系统,同时查看是否有相关记录:

library(BIEN)
# 验证TNRS修正后的物种名称
tax_results <- BIEN_taxonomy_species(
  species = c("Abies x borisii-regis", "Abies nordmanniana subsp. equi-trojani", "Abies bornmuelleriana")
)
print(tax_results)

如果返回空数据框,说明BIEN库中本身没有该物种的记录,或者名称匹配失败;如果有结果,再进一步检查筛选条件。

2. 调整筛选条件,排查过滤导致的无数据

你的代码中设置了cultivated = FALSE和natives.only = TRUE,这两个条件会过滤掉栽培种和非本土记录,可能导致无数据返回。尝试放宽条件测试:

# 测试放宽筛选后的结果
occ_test <- BIEN_occurrence_species(
  species = c("Abies x borisii-regis"),
  cultivated = TRUE,  # 包含栽培记录
  natives.only = FALSE,  # 包含非本土记录
  collection.info = FALSE,
  all.taxonomy = TRUE
)
cat("返回记录行数:", nrow(occ_test), "\n")

如果这里有数据,说明原筛选条件过于严格,可根据需求调整参数。

3. 添加空数据判断,避免构建data.frame时报错

无论是否获取到数据,先判断记录行数再构建结果数据框,防止报错:

occ <- BIEN_occurrence_species(
  species = c("Abies x borisii-regis"),
  cultivated = FALSE,
  natives.only = TRUE,
  collection.info = FALSE,
  all.taxonomy = TRUE
)

# 处理空数据情况
if (nrow(occ) > 0) {
  ccdf <- data.frame(
    species = occ$scrubbed_species_binomial,
    decimalLongitude = occ$longitude,
    decimalLatitude = occ$latitude,
    dataset = "BIEN",
    stringsAsFactors = FALSE
  )
} else {
  # 创建结构一致的空数据框
  ccdf <- data.frame(
    species = character(),
    decimalLongitude = numeric(),
    decimalLatitude = numeric(),
    dataset = character(),
    stringsAsFactors = FALSE
  )
  warning("未找到指定物种的分布记录")
}

4. 特殊字符说明

BIEN的函数原生支持带-和x(杂交种标记)的物种名称,不需要额外转义或特殊格式处理,名称本身不是问题核心,重点是物种是否在库中有匹配记录,以及筛选条件是否合理。

内容的提问来源于stack exchange,提问作者user23632192

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 22:08:15