stats包中nlm函数的源码
Source code of nlm function in stats package
我需要找到 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?
任何人都可以告诉我如何进一步进行吗?
您可以在此 GitHub 存储库中浏览 R 源代码:r-source。
搜索术语 "SEXP nlm",因为 stats:::C_nlm
指向名称为 "nlm"
的函数,并且所有向 R 返回数据的函数都使用名为 SEXP
的数据类型( S表情).
您将在文件 statsR.h and 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;
我需要找到 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?
任何人都可以告诉我如何进一步进行吗?
您可以在此 GitHub 存储库中浏览 R 源代码:r-source。
搜索术语 "SEXP nlm",因为 stats:::C_nlm
指向名称为 "nlm"
的函数,并且所有向 R 返回数据的函数都使用名为 SEXP
的数据类型( S表情).
您将在文件 statsR.h and 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;