在R脚本中提取有关函数和包的使用的信息

hen*_*ber 7 reflection parsing static-analysis r

在一个或多个R脚本中提取函数调用及其出现的行的正确方法是什么?是否有允许我这样做的解析基础函数或包,还是应该使用正则表达式构建解决方案?

例如:

function_calls("project1/exploratory_analysis.R")
Run Code Online (Sandbox Code Playgroud)

应输出如下数据帧:

##    function  line                filename
## 1    tapply    35  exploratory_analysis.R
## 2     qplot    80  exploratory_analysis.R
Run Code Online (Sandbox Code Playgroud)

我最终想要实现的是在一个或多个R脚本中构建函数调用和加载包的反向索引,用于教育和参考目的.(例如,用作具有使用示例的存储库).例如:

--------------------------------------------------------    
| function |       source_file      | line  |  package |
|:--------:|:----------------------:|:-----:|:--------:|
|  tapply  | exploratory_analysis.R |   35  |   base   |
|   qplot  | exploratory_analysis.R |   80  |  ggplot2 |
|    cor   |      regression.R      |   15  |   stats  |
|    cor   |      regression.R      |   27  |   stats  |
|  tapply  |      regression.R      |   12  |   base   |
| fromJSON |     load_dataset.R     |   5   | jsonlite |
|    %>%   |    transformation.R    |   10  | magrittr |
--------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)

可以使用一些正则表达式来提取函数调用,但我想知道是否存在支持此任务的解析,静态代码分析或反射工具.

我想结合parse(),substitute(),getParseData(),deParse(),srcfile()(或者在包装功能mvbutils,codetools)将有可能,但我不符合他们的使用不够熟悉的数字出来我自己.