2017-05-23 124 views
5

对于想要显示程序包依赖关系的人来说,有很多资源,但我特别感兴趣的是可视化程序包内的函数及其相互依赖关系。有像miniCRAN这样的工具用于绘制程序包依赖关系,但是有什么可用来在程序包中绘制函数依赖关系?可视化R函数依赖关系

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

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

那我就只是想有两个标节点和边缘将它们连接起来,描绘上func1func2依赖性的图表。

我认为这里有很多的软件包有真正有毛病的函数依赖,这样的实用工具可以帮助理解/组织/重构/等。

谢谢。

回答

5

我认为一个更好的选择(建立在mvbutil包的foodweb函数之上)是通过datastorm构建的DependenciesGraph包 - 在Github上打开,在其更一般的visNetwork包之上。

在我的例子之间的依赖关系可视化,我一直在可视化我自己包的维护和发展,并已非常高兴的结果。

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来绘制foodweb函数的输出要好得多,因为通常很难让文本看起来很好显示在每个节点的顶​​部,所有边缘在foodweb图中都有不同的颜色,并且在我看来,基本的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

(对不起有一个在名称的差异,他们真的是相同的功能,我刚好已经更名为使这两者之间的功能地块)。

3

我建议使用mvbutils包中的foodweb函数。

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

library(mvbutils) 
foodweb(where = e) 

有关更多信息,请参阅?mvbtools下的示例。

+0

谢谢!这很有帮助。你知道是否有办法缩小文本,或者增加缩放而不调整窗口大小?当我将它运行在我正在使用的软件包上时,它被挤在一起阅读:http://i.imgur.com/yiL9NIU。png – ctesta01

+1

我在foodweb的文档中找到了我上面评论的答案。他们说如果运行'foodweb(.Last.value,cex =“低于1的东西”,charlim =“可能低于100的东西”),它是不可读的(就像我的) – ctesta01