我想学习如何optim(..., hessian=TRUE)
计算Hessian,所以我看了一下函数的定义.接近结束时,它包括以下呼叫.External2()
:
if (hessian) res$hessian <- .External2(C_optimhess, res$par, fn1, gr1, con)
看起来有一个名为外部C函数的调用C_optimhess
,所以我grep
是R源目录C_optimhess
,但是空出来了.在R的代码库中只出现两次该字符串,一个在optim
,一个在optimHess
.这两个函数都定义在$R_SOURCE_DIR/src/library/stats/R/optim.R
,并且该文件不包含其他提示/注释/引用.
optim
帮助文件引用了几个函数的优化方法基于的代码,但是(似乎)没有指向源代码C_optimhess
.
在这种情况下,我应该在哪里找到被调用的C代码.External2
?
请注意,这C_optimhess
是一个对象,而不是一个字符串.
> stats:::C_optimhess $name [1] "optimhess" $address <pointer: 0x266b1a0> attr(,"class") [1] "RegisteredNativeSymbol" $dll DLL name: stats Filename: /usr/lib/R/library/stats/libs/stats.so Dynamic lookup: FALSE $numParameters [1] 4 attr(,"class") [1] "ExternalRoutine" "NativeSymbolInfo"
所以你需要grep for"optimhess" $R_SOURCE_DIR/src/library/stats/src/
:
josh@compy: $R_SOURCE_DIR/src/library/stats/src > grep optimhess * init.c: EXTDEF(optimhess, 4), optim.c:SEXP optimhess(SEXP call, SEXP op, SEXP args, SEXP rho) statsR.h:SEXP optimhess(SEXP call, SEXP op, SEXP args, SEXP rho);