我已经获得了大量格式不佳的单片R代码,并且有很多功能,我想知道哪些函数调用了什么函数。
我以为我可以使用roxygen的@callGraph东西,但是a)代码需要在一个包中,这将是这个代码的头疼,并且b)当我运行它时它甚至似乎都不起作用在我的简单包装上。我看到其中一位Roxygen作者发布了一条帖子,称由于Rgraphviz依赖性而禁用了调用图生成,但代码就在那里。反正。
任何人都有更好的方法快速计算foo调用bar,baz和qux,而qux调用quux?
编辑:基于R的分析系统的解决方案非常棒,假设您可以实际运行代码...文件中的一半东西不能运行,我不知道它的作用...静态分析我想是太过于希望了。
编辑2:Roxygen的调用图东西似乎是基于函数表达式的递归下降和检查is.callable进行静态分析。能够在任何功能上运行它会很可爱......明天我可能会玩这个......
答案 0 :(得分:4)
profr会帮助你吗?来自文档:
> ?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)
不完全是你所追求的,但你可以根据自己的需要进行调整。
答案 1 :(得分:2)
我没有使用它,但快速查看proftools包表明它可以执行此操作。您必须先运行Rprof然后使用proftools来分析输出。我想你想要plotProfileCallGraph()
功能。
答案 2 :(得分:2)
除了proftools和profr之外,Rmain上还有Romain的Perl脚本。结合graphviz,它会绘制图形(边缘加权) - 请参阅here了解更多信息。
答案 3 :(得分:2)