2015-05-21 2 views
1

Мне нужно найти исходный код функции nlm.Исходный код функции nlm в пакете статистики

Когда я использую

edit(nlm) 

ниже кода появляется

function (f, p, ..., hessian = FALSE, typsize = rep(1, length(p)), 
    fscale = 1, print.level = 0, ndigit = 12, gradtol = 1e-06, 
    stepmax = max(1000 * sqrt(sum((p/typsize)^2)), 1000), steptol = 1e-06, 
    iterlim = 100, check.analyticals = TRUE) 
{ 
    print.level <- as.integer(print.level) 
    if (print.level < 0 || print.level > 2) 
     stop("'print.level' must be in {0,1,2}") 
    msg <- (1 + c(8, 0, 16))[1 + print.level] 
    if (!check.analyticals) 
     msg <- msg + (2 + 4) 
    .External2(C_nlm, function(x) f(x, ...), p, hessian, typsize, 
     fscale, msg, ndigit, gradtol, stepmax, steptol, iterlim) 
} 

теперь, когда я хочу, чтобы посмотреть, что insode C_nlm

Я попытался

stats:::C_nlm 

и Я получаю

$name 
[1] "nlm" 

$address 
<pointer: 0x0000000004a83920> 
attr(,"class") 
[1] "RegisteredNativeSymbol" 

$dll 
DLL name: stats 
Filename: C:/Program Files/R/R-3.1.2/library/stats/libs/x64/stats.dll 
Dynamic lookup: FALSE 

$numParameters 
[1] 11 

attr(,"class") 
[1] "ExternalRoutine" "NativeSymbolInfo" 

После некоторого поиска в Интернете я узнал, что мне нужно использовать grep после этого.

Но я не понимаю, как его использовать. я попробовал эти ссылки

How to locate code called by .External2()?

How can I view the source code for a function?

Может кто-нибудь пожалуйста, скажите мне, как действовать дальше?

+0

В какой ОС вы находитесь? – stanekam

+0

@iShouldUseAName Windows 8 – Artiga

ответ

2

Вы можете просмотреть исходный код R в этом репо GitHub: r-source.

Поиск его на термин «Sexp НМГ», поскольку stats:::C_nlm указывает на функцию с именем "nlm" и все функции, возвращающие данные в R использовать тип данных, называемый SEXP (выражение S).

Вы получите два изображения в файлах statsR.h и optimize.c. C-файл - это то, что вы ищете, поэтому сходите к линии, начинающейся с SEXP nlm, и вы ее получили.

SEXP nlm(SEXP call, SEXP op, SEXP args, SEXP rho) 
{ 
    SEXP value, names, v, R_gradientSymbol, R_hessianSymbol; 

    double *x, *typsiz, fscale, gradtl, stepmx, 
    steptol, *xpls, *gpls, fpls, *a, *wrk, dlt; 

    int code, i, j, k, itnlim, method, iexp, omsg, msg, 
    n, ndigit, iagflg, iahflg, want_hessian, itncnt; 


/* .Internal(
* nlm(function(x) f(x, ...), p, hessian, typsize, fscale, 
*  msg, ndigit, gradtol, stepmax, steptol, iterlim) 
*/ 
    function_info *state; 
+0

Благодарим вас за ответ. – Artiga

Смежные вопросы