如何在R语言中通过通用名获取作物的科学名称?
R语言实现作物通用名转科学名称
可以结合taxize和rgbif包实现需求,以下是针对作物类物种的封装函数及使用方法:
1. 安装并加载依赖包
# 首次运行安装包 install.packages(c("rgbif", "taxize")) # 加载包 library(rgbif) library(taxize)
2. 封装查询函数
这个函数优先从权威数据库查询,同时过滤作物相关类群(通过作物常见所属科筛选,可按需扩展):
get_scientific_name <- function(common_name) { # 用taxize查询通用名对应物种 tax_result <- taxize::resolve(common_name, database = "gbif") # 筛选已确认的有效结果 valid_result <- tax_result[!is.na(tax_result$scientificName) & tax_result$status == "ACCEPTED", ] # 定义常见作物所属科,可根据需求扩展 crop_families <- c("Lauraceae", "Poaceae", "Solanaceae", "Fabaceae", "Rosaceae", "Brassicaceae", "Cucurbitaceae", "Asteraceae") # 过滤作物类物种 valid_crop <- valid_result[valid_result$family %in% crop_families, ] # 返回第一个匹配的科学名 if (nrow(valid_crop) > 0) { return(valid_crop$scientificName[1]) } # 若taxize无结果,尝试rgbif的骨干名称查询 gbif_result <- rgbif::name_backbone(name = common_name, rank = "species") if (!is.null(gbif_result$scientificName) && gbif_result$status == "ACCEPTED") { if (gbif_result$family %in% crop_families) { return(gbif_result$scientificName) } } # 无匹配作物时返回NA return(NA_character_) }
3. 测试函数
# 测试鳄梨查询 get_scientific_name("avocado") # 输出:"Persea americana"
注意事项
- 作物科列表可根据自身需求扩展,比如添加棕榈科(Arecaceae)、芸香科(Rutaceae)等
- 部分通用名可能对应多个物种,函数默认返回第一个匹配的有效作物物种,若需多结果可修改返回逻辑
- 可以通过调整
rank参数(如限定为"species")来提升查询精准度
内容的提问来源于stack exchange,提问作者close2zero
相关产品推荐
相关产品推荐

