1. ホーム
  2. r

[解決済み] Rの.Internalや.Primitive関数のソースコードを見るにはどうしたらいいですか?

2023-06-24 10:19:01

質問

のソースコードはどちらも表示されません。 pnorm 関数のソースコードを表示しています。

stats:::pnorm
getAnywhere(pnorm)  

のソースコードを見るにはどうしたらよいですか? pnorm ?

sum
 (..., na.rm = FALSE)  .Primitive("sum")
.Primitive("sum")
function (..., na.rm = FALSE)  .Primitive("sum")
methods(sum)
no methods were found

のソースコードを見るにはどうしたらいいでしょうか? sum 関数のソースコードを見るには?

どのように解決するのですか?

のRのソースコードは pnorm

function (q, mean = 0, sd = 1, lower.tail = TRUE, log.p = FALSE) 
.Call(C_pnorm, q, mean, sd, lower.tail, log.p)

つまり、技術的に言えば、"pnorm" と入力するのは と入力すると、ソースコードが表示されます。 しかし、もっと便利なことがあります。の根性は pnorm はCで書かれているので、前の質問のアドバイスの はRでソースコードを表示する は周辺的にしか役に立ちません(その大部分は名前空間などに隠された関数に集中しています)。

Uwe Ligges の の記事、Accessing the Sources、R news。 (p. 43) は、良い一般的な参考文献です。 その文書から

Rのソースコードを見ていると、時々、以下の関数の呼び出しが表示されます。 が表示されることがあります。 .C() , .Call() , .Fortran() , .External() または .Internal().Primitive() . これらの関数は、共有オブジェクトなどのコンパイルされたコード内のエントリポイントを呼び出すものです。 静的ライブラリやダイナミックリンクライブラリなどのコンパイルされたコードのエントリポイントを呼び出すものです。したがって したがって、コードの完全な理解が必要な場合は、コンパイルされたコードのソースを調べる必要があります。 必要です。 ... まず最初に行うのは まず、ファイル'$R HOME/src/main/names.c'のエントリポイントを探します。 呼び出し側のR関数が .Primitive() または .Internal() . これは、「単純な」R関数を実装したコードの次の例で行われています。 sum() .

(強調されているのは、あなたが質問した正確な機能 ( sum )はLiggesの記事でカバーされています)。

あなたがどれだけ真剣にコードを掘り下げたいかにもよりますが、Ligges が提案するようにソースコードをダウンロードして解凍する価値があるかもしれません。 Ligges が提案するように、ソース コードを解凍する価値があるかもしれません (たとえば、そうすれば、"Command-line Tools" (コマンドライン ツール) のように のような grep などのコマンドラインツールを使ってソースコードを検索することができます)。 もっと気軽に見るには を介してオンラインでソースを見ることができます。 Subversion サーバー または Winston Chang の github ミラー (ここでのリンク先は特に src/nmath/pnorm.c ). (正しい場所を推測する。 src/nmath/pnorm.c という正しい場所を推測するには、Rのソースコードの構造にいくらか精通している必要があります)。

meansum はどちらも 要約.c .