-1

これらの線に沿って尋ねられた以前の質問への私の参照を以下に参照してください。

私はtaxizeR でライブラリを実行しています。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) 

ただし、これにより、上記の対話モードで示したのと同じ結果が得られました。

あなたの助けに感謝します。

4

1 に答える 1

0

更新: 以下は無視してください。明らかに、Nathan Werth が上記のコメントに最良の回答を投稿しました。

tax.num <- get_tsn_(searchterm = "Acer rubrum", rows = 1)

素晴らしい作品!

...

これを処理するためにソース コードを変更することにしました。もっと望ましい解決策があると思いますが、これは私のニーズを満たしています。

get_tsn.Rしたがって、ソースからのファイルで、次のコードブロックを置き換えました

      # prompt
      message("\n\n")
      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 に再コンパイルしてインストールします。

私はまだ他のより良い答えを歓迎します。

于 2018-01-23T19:26:06.807 に答える