2011-01-25 11 views
25

多くの機能を備えたフォーマットの悪いモノリシックなRコードを大量に取得しました。どの機能がどの機能を呼び出すのかを考えていきたいと思います。コールグラフを生成するR

私はroxygenの@callGraphのものを使うことができると思ったが、a)コードはパッケージ内にある必要があり、このコードで頭痛になる。b)実行時に動作しないそれは私の簡単なパッケージにあります。私は、コールグラフの生成がRgraphvizの依存関係のために無効になっていると言っているRoxygenの作者からの投稿を見ていますが、コードはそこにあります。とにかく。

fooがbar、baz、およびquxを呼び出し、quxがquuxを呼び出していることを誰かがすぐに理解する良い方法がありますか?

編集:実際にコードを実行できると仮定すると、Rのプロファイリングシステムに基づいたソリューションは優れています...ファイルの半分は実行されず、分析はあまりにも多くのことを願っています。

編集2:Roxygenのコールグラフは、関数の式の再帰的な降下とis.callableのチェックに基づいて静的解析を行うようです。これをどんな機能でも実行できるのは素敵でしょう...明日はこれで遊ぶかもしれません...

答えて

17

CRANの 'mvbutils'パッケージから 'foodweb'関数を見ることができます。ここではその使用法を説明した記事へのリンクです:

http://www.r-bloggers.com/r-function-of-the-day-foodweb-2/

免責事項:これは私のウェブサイトであり、私はその記事を書きました。

+0

私はこのような何かを行う関数を書くというアイデアを熟考していました。そして、それはあなたが上記のブログ投稿を投稿した時代であった。偉大な心は似ていると思いますか? :) –

+1

かなり正確に私が何をしていた。今度は出力をドット形式に変えたり、他のRグラフパッケージにロードしたりできます... – Spacedman

3

profrお手伝いしますか?ドキュメントから:

enter image description here

> ?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

私はそれを使用しませんでしたが、proftoolsパッケージを簡単に見てみると、これが可能です。最初にRprofを実行してから、proftoolsを使用して出力を分析する必要があります。私はあなたがplotProfileCallGraph()機能をしたいと思う。

3

proftoolsとprofr以外にも、Romain on the R WikiのPerlスクリプトがあります。 graphvizと組み合わせると、(エッジが加重された)グラフが表示されます - 詳細はhereを参照してください。

+0

ニース。 R binディレクトリに入っていなければなりませんか? ./Rprof2dot perlスクリプトと同じように動作するようで、R依存関係は見えません。 – Spacedman

+0

私はperlスクリプトを使用したとき、ローカルパスまたはカレントディレクトリに保存しました。それはまだRと完全には統合されていません。 –

+0

リンクは現在死んでいます。 – qed

2

CodeDependsパッケージ(CRANwebsiteGitHub)が面白そう、でも、私はそれに見ていません。とりわけ、それは機能makeCallGraph()機能を介して、おそらく

のセット間のコールグラフを作成

  • を約束します。

関連する問題