16

match.callRの関数のソースコードを見たいのですが。内部関数なので、Rソースコードをダウンロードして./src/main/names.cに行き、そこで探しましmatch.callた。

したがって、対応する.c関数が。と呼ばれることがわかりましたdo_matchcall。わかりました。しかし、。 / src / main /にある数十の.cファイルのうち、関数が含まれているものを見つけるにはどうすればよいdo_matchcallですか?

ところで、違いが生じる場合に備えて、私はWindowsマシンを使用しています。

4

4 に答える 4

10

Windows ユーザーとして、ここにいくつかのオプションがあります。前者の方が望ましいですが、たまにしか使用しない場合は後者を使用しても問題ありません。

  • Joshua と Gavin の両方が言及した強力なコマンドを使用して Windows ディレクトリを検索できるようにするgrepwinをダウンロードします。プログラムのソースディレクトリをいろいろいじる場合、grepこれ (またはそれに相当するもの) は不可欠です。

  • このサイトの検索バーを使用して、R ソース ディレクトリで の定義を検索しますdo_matchcall。返された結果をクリックすると、do_matchcall「ファイル unique.c の 1193 行で [定義済み]」であることがわかり、unique.c のコードへのハイパーリンクが表示されます。

とはいえ、私が言ったように、Windowsボックスgrep.

于 2012-11-07T22:45:34.313 に答える
6

Uwe Ligges は、 R News (2006, 6(4):43-45)でまさにこのトピックに関する「R Help Desk」記事を書きました。

使用されている実際の C 関数を特定したら、ファイルシステム検索ツールを使用して、関連するソース フォルダーで関数名を検索します。この場合./src/main/、たとえば Linux の場合

$ grep -r -H "do_matchcall" ./src/main/
./src/main/.svn/text-base/names.c.svn-base:{"match.call",   do_matchcall,   0,  11, 3,  {PP_FUNCALL, PREC_FN,   0}},
./src/main/.svn/text-base/unique.c.svn-base:SEXP attribute_hidden do_matchcall(SEXP call, SEXP op, SEXP args, SEXP env)
./src/main/unique.c:SEXP attribute_hidden do_matchcall(SEXP call, SEXP op, SEXP args, SEXP env)
./src/main/names.c:{"match.call",   do_matchcall,   0,  11, 3,  {PP_FUNCALL, PREC_FN,   0}},

この場合、そこが注目すべき場所であることを示していunique.cます。

私の知る限りでは、(端末へのシステム コールを呼び出す以外に) R 内から、R 内の特定の関数の C コードを含むソース ファイルを特定する方法はありませgrepfind。 Rコード:-)

于 2012-11-07T22:36:40.050 に答える