84

どちらも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また、関数 のソース コードを表示するにはどうすればよいですか?

4

3 に答える 3

102

の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」と入力するとソースコードが表示されます。ただし、より便利です。の内臓はCでコーディングされているため、 Rのソースコードを表示pnormする前の質問のアドバイスは、周辺的にのみ役立ちます(ほとんどは、名前空間などに隠された関数に集中しています)。

RニュースのUweLiggesの記事、ソースへのアクセス(p。43)は、一般的な参考資料として適しています。その文書から:

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

(()について尋ねた正確な関数がsumLiggesの記事でカバーされているため、強調が追加されました。)

コードをどれだけ真剣に掘り下げたいかによっては、Liggesが提案するように、ソースコードをダウンロードして解凍する価値がある場合があります(たとえば、grepソースコードを検索するなどのコマンドラインツールを使用できます)。より簡単に調べるには、 RSubversionサーバーまたはWinstonChangのgithubミラーを介してオンラインでソースを表示できます(ここへのリンクは特にへのリンクですsrc/nmath/pnorm.c)。(見るsrc/nmath/pnorm.cのに適切な場所を推測するには、Rソースコードの構造にある程度精通している必要があります。)

meansum両方がsummary.cに実装されています。

于 2012-12-26T03:07:33.333 に答える
7
> methods(mean)
[1] mean.data.frame mean.Date       mean.default    mean.difftime   mean.IDate*    
[6] mean.POSIXct    mean.POSIXlt    mean.yearmon*   mean.yearqtr*  

   Non-visible functions are asterisked
> mean.default
function (x, trim = 0, na.rm = FALSE, ...) 
{
    if (!is.numeric(x) && !is.complex(x) && !is.logical(x)) {
        warning("argument is not numeric or logical: returning NA")
        return(NA_real_)
    }
    if (na.rm) 
        x <- x[!is.na(x)]
    if (!is.numeric(trim) || length(trim) != 1L) 
        stop("'trim' must be numeric of length one")
    n <- length(x)
    if (trim > 0 && n) {
        if (is.complex(x)) 
            stop("trimmed means are not defined for complex data")
        if (any(is.na(x))) 
            return(NA_real_)
        if (trim >= 0.5) 
            return(stats::median(x, na.rm = FALSE))
        lo <- floor(n * trim) + 1
        hi <- n + 1 - lo
        x <- sort.int(x, partial = unique(c(lo, hi)))[lo:hi]
    }
    .Internal(mean(x))
}
<bytecode: 0x155ef58>
<environment: namespace:base>
于 2012-12-26T03:34:31.337 に答える