在R包开发中,如何查找函数定义所在的文件?
定位R包中函数定义文件的简便方法
当然有啦!在开发R包时,快速找到函数定义所在的文件确实能省不少事,我常用这几个实用方法:
1. 针对已安装的包
如果你的my_package已经安装到系统里,可以用这两个基础函数:
getSrcFilename():直接传入函数对象就能获取它的源码文件路径,比如:
注意这个方法只对纯R编写的函数有效,如果是C/C++编译的函数会返回getSrcFilename(someOtherFunction)NULL。utils::getAnywhere():如果不确定函数是否在目标包中,用这个函数能搜索所有可见环境,结果里会明确标注函数所在的包和文件路径:getAnywhere("someOtherFunction")
2. 针对开发中的包(本地未安装)
如果是正在开发的包,还没安装到系统,用devtools或pkgload的工具更方便:
devtools::find_function():这完全就是你想要的类似findFunction()的功能,直接指定函数名和包名就能返回文件路径:
前提是你已经用devtools::find_function("someOtherFunction", package = "my_package")devtools::load_all()加载了本地包。pkgload::find_function():如果不想依赖devtools,可以直接用底层的pkgload包,用法和上面一致:pkgload::find_function("someOtherFunction", package = "my_package")
3. 特殊情况:S3/S4方法
如果someOtherFunction是S3或S4方法,得先找到具体的方法实现,再定位文件:
- 对于S3方法,先用
methods()列出所有方法:
然后针对具体的方法(比如methods("someOtherFunction")someOtherFunction.data.frame)用上面的工具查找。 - 对于S4方法,用
showMethods()查看方法定义,再用getMethod()获取方法对象后用getSrcFilename()。
另外提个小技巧:在RStudio里,按住Ctrl(Windows/Linux)或Cmd(Mac)点击函数名,就能直接跳转到它的定义文件,开发时超方便!
内容的提问来源于stack exchange,提问作者statquant
相关产品推荐
相关产品推荐

