在 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_
的常见名称,因此您可以继续并根据需要将它们摘除
如果有人问这个问题时使用了我不认识的术语,我深表歉意,但它似乎不是。
我正在使用库 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_
的常见名称,因此您可以继续并根据需要将它们摘除