请参阅下面我对之前提出的问题的引用。
我正在运行taxize
在 R 中的库.Taxize 包含一个函数,用于获取与学名get_tsn()
关联的稳定数字。
我可以在交互模式或非交互模式下运行它,这样我就可以 提示与否,分别在多个命中中进行选择。
互动:
> tax.num <- get_tsn("Acer rubrum", ask=TRUE)
Retrieving data for taxon 'Acer rubrum'
tsn target commonNames nameUsage
1 28728 Acer rubrum red maple accepted
2 28730 Acer rubrum ssp. drummondii NA not accepted
3 526853 Acer rubrum var. drummondii Drummond's maple accepted
...
More than one TSN found for taxon 'Acer rubrum'!
Enter rownumber of taxon (other inputs will return 'NA'):
非交互式:
> tax.num <- get_tsn("Acer rubrum", ask=TRUE)
Retrieving data for taxon 'Acer rubrum'
Warning message:
> 1 result; no direct match found
我需要在交互模式下运行此库,以便在有多个匹配项时不会获得空结果。然而,照看这个脚本对于我的数据规模来说是完全不现实的,这些数据有数百万个学名。因此,我想自动响应提示,以便答案始终1
.对于可能 99% 的案例,这将是正确答案,并且最终仍将在 100% 的情况下导致下游的正确答案,原因可能超出了这个问题的范围。
因此,我怎样才能自动响应以始终1
?
我看了这个问题,并尝试相应地修改我的代码。
options(httr_oauth_cache=T)
tax.num <- get_tsn("Acer rubrum",ask=T)
但是,这给出了与上述交互模式相同的结果。
感谢您的帮助。
更新:忽略下面。显然,Nathan Werth在上面的评论中发布了最佳答案。
tax.num <- get_tsn_(searchterm = "Acer rubrum", rows = 1)
效果很好!
。
我决定修改源代码来处理这个问题。我怀疑有一个更理想的解决方案,但这个解决方案满足了我的需求。
因此,在从源get_tsn.R
的文件中,我替换了以下代码块
# prompt
message("nn")
print(tsn_df)
message("nMore than one TSN found for taxon '", x, "'!n
Enter rownumber of taxon (other inputs will return 'NA'):n")
# prompt
take <- scan(n = 1, quiet = TRUE, what = 'raw')
跟
take <- 1
我本可以删除其他回显到屏幕位,这是不必要的,现在不是真的。
我使用trace("get_tsn",edit=TRUE)
测试的修改后的函数返回如下:
> print(tax.num)
[1] "28728"
attr(,"match")
[1] "found"
attr(,"multiple_matches")
[1] TRUE
attr(,"pattern_match")
[1] FALSE
attr(,"uri")
[1] "http://www.itis.gov/servlet/SingleRpt/SingleRpt?
search_topic=TSN&search_value=28728"
attr(,"class")
[1] "tsn"
我现在将重新编译并安装在 Linux 上,并编辑用于此特定项目。
我仍然欢迎其他更好的答案。