如果这个问题已经被我不认识的术语提出来,我很抱歉,但似乎并不是这样。
我正在使用库strategy
中的函数Imputer
来搜索超过120,000行常用名称的数据库的科学名称。这是10的一个子集:
comm2sci
当在此功能中使用NCBI数据库进行搜索时,如果通用名称是通用名称/通用名称而非物种特定名称,则会询问用户输入,例如,以下调用将通过输入“1”来要求澄清“AARDVARK”, “NA”为“2”或“返回”。
taxize
因此,我不能依靠这个功能来找到120000种物种的名称,而不是每隔几分钟我就坐着进入'返回'。我知道这个问题听起来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")
具体 - 但我过去也有这种情况和其他功能一样。我的问题是:是否有一种通用方法将install.packages("taxize")
library(taxize)
ncbioutput <- comm2sci(commnames, db = "ncbi")###querying ncbi database
调用放在条件语句中,当提示用户输入时它将返回特定值?或者写一个在提示时会返回一些输入的函数?
与此相关的所有搜索都告诉我如何询问用户输入,但不知道如何覆盖用户查询。这是我找到的两个问题主题,但我似乎无法将它们应用于我的情况:Make R wait for console input?,Switch R script from non-interactive to interactive
我希望这很清楚。非常感谢你的时间!
答案 0 :(得分:0)
因此,内部使用的get_*
函数默认情况下都会在有&gt;时询问用户输入。 1个选项。但是,所有这些函数都有一个带有下划线的姐妹函数,例如,get_uid_
不提示输入,并返回所有数据。您可以使用它来获取所有数据,然后按您喜欢的方式处理。
对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会从get_uid
/ get_uid_
返回常用名称,因此如果您愿意,可以继续将其删除