可视化R函数依赖项

cte*_*a01 15 dependencies r graph function

想要可视化包依赖关系的人有很多资源,但我特别感兴趣的是可视化包中的函数以及它们之间的依赖关系.有一些像miniCRAN这样的工具用于绘制包依赖关系,但是包中是否有可用于图函数依赖的东西?

例如,假设我的包中只有两个函数.

func1 <- function(n) return(LETTERS[n])
func2 <- function(n) return(func1(n%%26+1))
Run Code Online (Sandbox Code Playgroud)

然后我只想要一个带有两个标记节点的图形和连接它们的边缘,描绘了func2on 的依赖性func1.

我认为有很多软件包具有非常强大的功能依赖性,这样的实用程序可以帮助理解/组织/重构/等.

谢谢.

cte*_*a01 16

我认为一个更好的选择(建立在mvbutil包的foodweb函数之上)是由Github上的datastorm-open在他们更通用的visNetwork包之上构建的DependenciesGraph包.

在我的例子中,我一直在想象我自己的包维护和开发,并对结果非常满意.

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

DependenciesGraph生成的依赖关系图

输出是一个Web服务器(在RStudio的查看器中或在单独的浏览器中查看),允许您通过下拉或单击选择特定功能,放大和缩小,拖动它们等等.对我来说,这比使用基础R绘制foodweb函数的输出要好得多,因为通常很难让文本看起来很好地显示在每个节点的顶​​部,所有的边缘在foodweb图中都有不同的颜色,并且在我看来,基本R绘图函数正在做很多工作以确保绘图的布局可读或清晰.

与mvbutil的foodweb比较:

library(mvbutils)
library(QualtricsTools) 
deps <- foodweb(where="package:QualtricsTools", prune='make_split_coded_comments')
plot(deps)
Run Code Online (Sandbox Code Playgroud)

make_split_coded_comments的foodweb依赖图

(对不起,名称有差异,它们实际上是相同的功能,我碰巧在重新命名这两个图之间的功能).


李哲源*_*李哲源 7

我建议使用包中的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)
Run Code Online (Sandbox Code Playgroud)

请参阅下面的示例?mvbtools了解更多


小智 6

为了完整起见,并且作为一个无耻的插件,我正在开发另一个包来解决这个问题:foodwebr。该DependenciesGraphs软件包似乎已经好几年没有更新了,我发现mvbutils::foodweb()很难解析输出。所有三个包在底层都使用相同的依赖性检测算法。

使用原来的例子:

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

fw <- foodwebr::foodweb(env = e)

fw
#> # A `foodweb`: 2 vertices and 1 edge 
#> digraph 'foodweb' {
#>   func1()
#>   func2() -> { func1() }
#> }
Run Code Online (Sandbox Code Playgroud)

调用plot()显示图表(无法上传图像,因为这是我的第一篇文章):

plot(fw)
Run Code Online (Sandbox Code Playgroud)

您还可以用于tidygraph::as_tbl_graph()创建tidygraph对象,这为您提供了更多绘图和分析选项。

tidy_fw <- tidygraph::as_tbl_graph(fw)

tidy_fw
#> # A tbl_graph: 2 nodes and 1 edges
#> #
#> # A rooted tree
#> #
#> # Node Data: 2 x 1 (active)
#>   name 
#>   <chr>
#> 1 func1
#> 2 func2
#> #
#> # Edge Data: 1 x 2
#>    from    to
#>   <int> <int>
#> 1     2     1
Run Code Online (Sandbox Code Playgroud)

该软件包仍在开发中,但您可以尝试一下devtools::install_github("lewinfox/foodwebr")