web-dev-qa-db-ja.com

R関数従属性の視覚化

パッケージの依存関係を視覚化したい人のためのリソースはたくさんありますが、私は特にパッケージ内の関数とそれらの相互依存関係を視覚化することに興味があります。パッケージの依存関係をグラフ化するための miniCRAN のようなツールがありますが、パッケージ内の関数の依存関係をグラフ化するために利用できるものはありますか?

たとえば、パッケージに2つの関数しかないとします。

func1 <- function(n) return(LETTERS[n])
func2 <- function(n) return(func1(n%%26+1))

次に、2つのラベル付きノードとそれらを接続するエッジを含むグラフが必要です。これは、func2func1への依存関係を示しています。

そのようなユーティリティが理解/整理/リファクタリングなどに役立つ可能性のある、本当に毛深い機能依存性を持つパッケージがたくさんあると思います。

ありがとう。

17
ctesta01

より良いオプション(mvbutilパッケージのfoodweb関数の上に構築された)は、datastormによって構築されたDependenciesGraphパッケージだと思います-より一般的な visNetwork パッケージの上にGithubで開きます。

  • DependenciesGraph :パッケージと関数間の依存関係を視覚化するためのRパッケージ

私の例では、メンテナンスと開発のために自分のパッケージを視覚化しており、その結果に非常に満足しています。

library(DependenciesGraph)
library(QualtricsTools) # A package I'm developing
deps <- funDependencies("package:QualtricsTools", "generate_split_coded_comments")
plot(deps)

Dependency Graph generated by DependenciesGraph

出力はWebサーバー(RStudioのビューアーまたは別のブラウザーで表示)であり、ドロップダウンまたはクリックして特定の機能を選択したり、ズームインおよびズームアウトしたり、ドラッグしたりすることができます。私にとって、これはベースRを使用して食物網関数の出力をプロットするよりもはるかに優れています。各ノードの上に表示されるテキストをきれいに見せることが難しい場合が多く、食物網プロットではすべてのエッジの色がぎこちなく異なります。そして、ベースRプロット関数が、プロットのレイアウトを読み取り可能または明確にするために非常に多くのことを行っているようには見えません。

Mvbutilの食物網との比較:

library(mvbutils)
library(QualtricsTools) 
deps <- foodweb(where="package:QualtricsTools", Prune='make_split_coded_comments')
plot(deps)

A foodweb dependency graph of make_split_coded_comments

(名前に不一致があります。実際には同じ関数です。たまたま、これら2つのプロットを作成する間に関数の名前を変更しました)。

17
ctesta01

foodweb パッケージのmvbutils関数を使用することをお勧めします。

e <- new.env()
e$func1 <- function(n) return(LETTERS[n])
e$func2 <- function(n) return(func1(n%%26+1))

library(mvbutils)
foodweb(where = e)

詳細については、?mvbutilsの例を参照してください。

7
李哲源