在R中生成调用图

Spa*_*man 30 r call-graph

我已经获得了大量格式不佳的单片R代码,并且有很多功能,我想知道哪些函数调用了什么函数.

我以为我可以使用roxygen的@callGraph东西,但是a)代码需要在一个包中,这将是这个代码的头疼,并且b)当我在一个简单的上运行它时它似乎不起作用我的包裹.我看到其中一位Roxygen作者发布了一条帖子,称由于Rgraphviz依赖关系而禁用了调用图生成,但代码就在那里.无论如何.

任何人都有更好的方法来快速计算foo调用bar,baz和qux,而qux调用quux?

编辑:基于R的分析系统的解决方案很棒,假设您可以实际运行代码...文件中的一半东西不会运行,我不知道它做了什么...静态分析太多了我想是希望的.

编辑2:Roxygen的调用图东西似乎做了一个静态分析,基于函数表达式的递归下降和检查is.callable.能够在任何功能上运行它会很可爱......明天我可能会玩这个...

csg*_*pie 5

教授会帮助你吗?从文档中:

> ?profr
> glm_ex <- profr(example(glm))
Read 17 items
>      head(glm_ex)
             f level time start  end  leaf source
8      example     1 0.32  0.00 0.32 FALSE  utils
9  <Anonymous>     2 0.04  0.00 0.04 FALSE   <NA>
10      source     2 0.28  0.04 0.32 FALSE   base
11  prepare_Rd     3 0.02  0.00 0.02 FALSE   <NA>
12      render     3 0.02  0.02 0.04 FALSE   <NA>
13 getSrcLines     3 0.02  0.04 0.06 FALSE   base
>      summary(glm_ex)
               f          level             time          start       
 eval.with.vis  :10   Min.   : 1.000   Min.   :0.02   Min.   :0.0000  
 <Anonymous>    : 3   1st Qu.: 4.000   1st Qu.:0.02   1st Qu.:0.1200  
 lazyLoadDBfetch: 3   Median : 6.000   Median :0.02   Median :0.2000  
 %in%           : 3   Mean   : 7.211   Mean   :0.03   Mean   :0.1769  
 inherits       : 3   3rd Qu.: 9.000   3rd Qu.:0.02   3rd Qu.:0.2600  
 is.factor      : 3   Max.   :22.000   Max.   :0.32   Max.   :0.3000  
 (Other)        :65                                                   
      end            leaf            source         
 Min.   :0.0200   Mode :logical   Length:90         
 1st Qu.:0.1500   FALSE:75        Class :character  
 Median :0.2400   TRUE :15        Mode  :character  
 Mean   :0.2069   NA's :0                           
 3rd Qu.:0.2800                                     
 Max.   :0.3200                                     

> plot(glm_ex)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

不完全是您想要的,但您可以根据您的需要进行调整。