在 R 中自动输入用户查询

automate input to user query in R

如果有人问这个问题时使用了我不认识的术语,我深表歉意,但它似乎不是。

我正在使用库 taxize 中的函数 comm2sci 来为包含超过 120,000 行常用名称的数据库搜索学名。这是 10 的子集:

commnames <- c("WESTERN CAPERCAILLIE", "AARDVARK", "AARDWOLF", "ABACO ISLAND BOA", 
"ABBOTT'S DAY GECKO", "ABDIM'S STORK", "ABRONIA GRAMINEA", "ABYSSINIAN BLUE 
WINGED GOOSE", 
"ABYSSINIAN CAT", "ABYSSINIAN GROUND HORNBILL")

在此函数中使用 NCBI 数据库进行搜索时,如果通用名称是 generic/general 而不是特定物种,它会要求用户输入,例如,以下调用将要求对 "AARDVARK" 进行说明通过为 'NA'.

输入“1”、“2”或 'return'
install.packages("taxize")
library(taxize)
ncbioutput <- comm2sci(commnames, db = "ncbi")###querying ncbi database

因此,如果我每隔几分钟坐下来输入 'return',我就无法依靠此功能找到 120000 个物种的名称。我知道这个问题听起来 taxize 具体 - 但我过去也遇到过这种情况以及其他功能。我的问题是:是否有一种通用方法可以将 comm2sci 调用置于条件语句中,从而在提示用户输入时 return 一个特定值?或者以其他方式编写一个函数,在出现提示时将 return 一些输入?

与此相关的所有搜索都会告诉我如何请求用户输入,但不会告诉我如何覆盖用户查询。这是我发现的两个问题线程,但我似乎无法将它们应用到我的情况中:Make R wait for console input?, Switch R script from non-interactive to interactive

我希望这是清楚的。非常感谢您的宝贵时间!

因此,内部使用的 get_* 函数在存在 > 1 个选项时默认要求用户输入。但是,所有这些函数都有一个带下划线的姊妹函数,例如 get_uid_ 不提示输入,return 所有数据。您可以使用它来获取所有数据,然后按您喜欢的方式进行处理。

comm2sci 进行了一些更改,因此请先更新:devtools::install_github("ropensci/taxize")

举个例子。

library(taxize)
commnames <- c("WESTERN CAPERCAILLIE", "AARDVARK", "AARDWOLF", "ABACO ISLAND BOA", 
               "ABBOTT'S DAY GECKO", "ABDIM'S STORK", "ABRONIA GRAMINEA", 
               "ABYSSINIAN BLUE WINGED GOOSE", 
               "ABYSSINIAN CAT", "ABYSSINIAN GROUND HORNBILL")

然后使用get_uid_获取所有数据

ids <- get_uid_(commnames)

根据需要处理 ids 中的结果。在这里,为了简洁起见,我们只抓取每个

的第一行
ids <- lapply(ids, function(z) z[1,])

然后把uid抓出来

ids <- as.uid(unname(vapply(ids, "[[", "", "uid")), check = FALSE)

并传给comm2sci

comm2sci(ids)

$`100830`
[1] "Tetrao urogallus"

$`9818`
[1] "Orycteropus afer"

$`9680`
[1] "Proteles cristatus"

$`51745`
[1] "Chilabothrus exsul"

$`8565`
[1] "Gekko"

$`39789`
[1] "Ciconia abdimii"

$`278977`
[1] "Abronia graminea"

$`8865`
[1] "Cyanochen cyanopterus"

$`9685`
[1] "Felis catus"

$`153643`
[1] "Bucorvus abyssinicus"

请注意 NCBI return 来自 get_uid/get_uid_ 的常见名称,因此您可以继续并根据需要将它们摘除