【发布时间】:2019-11-14 15:59:39
【问题描述】:
我有一个物种列表(大约 2000 个),我想验证:同义词、拼写、最近的名称等。
这是一个子集:
data <- c("Abalistes stellatus", "Abudefduf abdominalis", "Abudefduf bengalensis", "Abudefduf concolor", "Abudefduf conformis", "Abudefduf luridus", "Abudefduf notatus", "Abudefduf saxatilis", "Abudefduf septemfasciatus", Abudefduf sexfasciatus", "Abudefduf sordidus", "Abudefduf sparoides", "Abudefduf troschelii", "Abudefduf vaigiensis", "Abudefduf whitleyi", "Acanthaluteres brownii", "Acanthaluteres spilomelanurus", "Acanthaluteres vittiger", "Acanthemblemaria crockeri" ,"Acanthemblemaria hancocki", "Acanthemblemaria spinosa", "Acanthistius cinctus", "Acanthistius ocellatus", "Acanthistius pardalotus", "Acanthistius patachonicus" ,"Acanthistius sebastoides", "Acanthistius serratus", "Acanthochromis polyacanthus", "Acanthopagrus australis", "Acanthopagrus latus", "Acanthostracion polygonius", "Acanthostracion quadricornis", "Acanthurus achilles", "Acanthurus albipectoralis", "Acanthurus auranticavus", "Acanthurus bahianus", "Acanthurus bariene", "Acanthurus blochii", "Acanthurus chirurgus", "Acanthurus coeruleus", "Acanthurus dussumieri", "Acanthurus fowleri", "Acanthurus gahhm", "Acanthurus grammoptilus", "Acanthurus guttatus", "Acanthurus leucocheilus", "Acanthurus leucopareius", "Acanthurus leucosternon", "Acanthurus lineatus" ,"Acanthurus maculiceps")
我在COL(Catalogue of Life)数据库中搜索相应的名字,函数如下:
check_sp_name <- function(sp_list){
# takes a list of species name that we want to check
verified_names <- c()
for (i in 1:length(sp_list)) {
x <- NA
x <- col_search(name = sp_list[i])
x <- x[[1]]
if (nrow(x)==0) {
verified_names <- append(verified_names, "Non observation")
} else {
if (sum(x$status == "accepted name") != 0) {
y <- x$name[x$status == "accepted name" & x$rank == "species"]
} else if (sum(x$status == "synonym") != 0) {
y <- x$acc_name[x$status == "synonym" & x$rank == "species"]
} else if (sum(x$status == "provisionally accepted name") != 0) {
y <- x$name[x$status == "provisionally accepted name" & x$rank == "species"]
}
y <- ifelse(length(y) == 0, "infraspecies", y)
y <- ifelse(length(y) > 1, y[y == sp_list[i]], y)
verified_names <- append(verified_names, y) # list of verified species names
}
print(i)
}
verified_inputs <- data.frame(input_names = sp_list, output_names = verified_names)
return(verified_inputs)
}
问题:
昨天我尝试了代码,一切都很好,但是今天早上我确实改变了任何东西,我得到了这个错误:
if (nrow(x) == 0) { 中的错误:参数长度为零 另外:警告信息: 未找到 COL 分类单元
我尝试了单独填充 x 的行并且它起作用了...此外,错误不会每次都在相同的迭代中发生... 我整天都在为此苦苦挣扎。
我的一个假设是 COL 网站目前不稳定。确实,首页上显示了一条消息:https://www.catalogueoflife.org/
- 这可能是我收到此错误的原因吗?
- 有人想绕过它吗?
另外我必须提到,我尝试使用 GBIF 数据库,但它不像 COL 那样最新。
【问题讨论】:
-
会不会是某种速率限制?大多数免费 API(如果不是全部的话)都会限制您在给定时间内可以执行的请求数量。在失败时打印
x的内容对您很有用。我不知道col_search处理来自 COL API 的不良响应的能力如何。 -
警告消息提示
col_search中的一个错误,可能是由于 API 的更改。如果您在 github crosspost 中得到答案,请在此处更新 -
当我收到错误 x 时返回
[1] "COL taxon not found"