5

多くの場合、R には多数のパッケージに散在する多数の関数があります。これらはすべて同じ目的を持っていますが、もちろん精度、パフォーマンス、ドキュメンテーション、理論的厳密性などは異なります。

R 内から、さらにはインストールしていない CRAN パッケージの中から、これらをどのように見つけますか?

たとえば、一般的なプロット関数です。基本パッケージの関数を使用すると、セカンダリ ティックの設定がはるかに簡単になります。

minor.tick(nx=n, ny=n, tick.ratio=n)

もちろん、プロットは R コアにありますが、minor.tickはありません。実際にはHmiscにあります。

もちろん、それはplotのドキュメントには表示されませんし、期待するべきでもありません。

別の例: plotへのデータ入力引数は、関数hexbinから返されたオブジェクトによって提供できます。この関数は、R コアの外部のライブラリからのものです。

これらの関数の引数をさまざまなライブラリから収集し、それらを単一の名前空間に配置するプログラムによる方法は、明らかに素晴らしいことでしょうか?

*編集: (上記の例をより明確に再記述しようとしています:) R コアで提供されるplotの引数。たとえば、軸の目盛り周波数の設定は xaxp/yaxp です。ただし、Hmisc パッケージの minor.tick 関数のように、基本パッケージの外部の関数を介して a/t/f を設定することもできますが、プロット メソッドのシグネチャを見ただけではわかりません。 . このための R のメタ関数はありますか?*

これまでのところ、それらに出くわしたので、手動で収集してきました。各セットは、1 つのTextMate スニペットに (付属のライブラリ インポートと共に) 収集されました。これはそれほど難しくなく、時間もかかりませんが、これらの追加の引数/パラメーターを見つけたときにのみ、スニペットを更新できます。これを行う標準的なRの方法、または少なくともより簡単な方法はありますか?

明確でない場合に備えて、複数のパッケージが同じ統計またはビューに向けられた関数を提供するケースについては話していません (たとえば、基本パッケージの「boxplot」、gplots の「boxplot.matrix」、および「bplots」 ' Rlab で)。私が話しているのは、関数名が 2 つ以上のパッケージで同じである場合です。

4

2 に答える 2

5

sos」パッケージは優れたリソースです。その主要なインターフェースは " findFn " コマンドで、文字列 (検索用語) を受け取り、Johnathan Baron のサイト検索データベースの "関数" エントリをスキャンし、(クラス " の) データ フレームに検索用語を含むエントリを返します。 findFn")。

このデータ フレームの列は、CountMaxScoreTotalScorePackageFunctionDateScoreDescription、およびLinkです。エントリの行の「リンク」をクリックすると、すぐにヘルプ ページが表示されます。

例: 1800 以上のすべての R パッケージですべての畳み込みフィルターを見つけたいとします。

library(sos)
cf = findFn("convolve") 

このクエリは「畳み込み」という用語に見えます。つまり、関数名である必要はありません。

「cf」を入力すると、見つかったすべての一致 (この場合は 23) の HTML テーブルが返されます。この表は、先ほど説明したデータ フレームの HTML レンダリングです。特に便利なのは、各列 (「カウント」、「MaxScore」など) は、列ヘッダーをクリックしてソートできるため、「スコア」、「パッケージ名」などで結果を表示できることです。

(余談ですが、その正確なクエリを実行すると、結果の1つは「latticeExtra」と呼ばれるパッケージの関数「panel.tskernel」でした。このパッケージに時系列フィルターが含まれていることを知りませんでした。それ以外で発見。

于 2010-02-26T13:46:40.263 に答える
1

あなたの質問に答えるのは簡単ではありません。決定的な機能は 1 つではありません。

formalsは、名前付き引数を関数に与え、そのデフォルトを名前付きリストに与える関数ですが、パラメーターを介して常に可変引数を持ち...、組み込みhadArg関数を使用して名前付き引数を非表示にすることができます。それらのリストを取得するには、getAnywhere を使用してから、hasArg の式をスキャンする必要があります。自分で自動的に行う方法は考えられません。それは、関数の隠し引数が文書化されていない場合です。

于 2009-11-29T03:51:21.637 に答える