如何查看R包中以下划线开头的隐藏函数?
解决R包中隐藏原生函数的查看问题
这种以下划线开头的函数大多是通过.Call()调用的原生C/C++函数,不属于R环境内的常规函数对象,所以getAnywhere()查不到是正常的。给你几个可行的解决办法:
直接查看包的源代码:
先通过packageDescription("你的包名")$URL获取包的源码仓库地址,在仓库里搜索_function关键词,就能找到对应的C/C++实现代码。如果是本地安装的包,也可以用system.file("src", package = "你的包名")定位到包的源码目录,直接查看里面的.c/.cpp文件。查看包的动态链接库符号:
这类原生函数最终会编译进包的动态链接库(.so/.dll/.dylib文件)里。- Linux/macOS:打开终端,定位到包的libs目录(路径类似
R/library/你的包名/libs),执行nm -D 动态库文件名 | grep "_function",就能找到对应的符号。 - Windows:用VS的
dumpbin工具,执行dumpbin /exports 动态库文件名 | findstr "_function",查看导出的符号。
- Linux/macOS:打开终端,定位到包的libs目录(路径类似
临时编译测试(如果能拿到代码片段):
要是你能从源码里找到_function的C/C++代码,可以把代码复制到一个.cpp文件里,用Rcpp::sourceCpp("你的文件.cpp")编译后,直接在R里调用测试。查内部文档或社区记录:
部分包会在内部文档(比如?包名-internal)里提到这类原生函数,也可以搜一下包的GitHub Issues、作者的技术博客,看看有没有相关讨论。
内容的提问来源于stack exchange,提问作者Nicolas Fabre
相关产品推荐
相关产品推荐

