如何找到.External2()调用的代码?

 你不懂_de_笑 发布于 2023-02-09 13:31

我想学习如何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

1 个回答
  • 请注意,这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);
    

    2023-02-09 13:34 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有