自动输入R中的用户查询

时间:2017-07-21 03:01:10

标签: r automation user-input interactive ropensci

如果这个问题已经被我不认识的术语提出来,我很抱歉,但似乎并不是这样。

我正在使用库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

我希望这很清楚。非常感谢你的时间!

1 个答案:

答案 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_返回常用名称,因此如果您愿意,可以继续将其删除