首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >可视化R函数依赖项

可视化R函数依赖项
EN

Stack Overflow用户
提问于 2017-05-23 19:05:59
回答 5查看 7K关注 0票数 20

对于想要可视化包依赖关系的人来说,有很多资源,但我特别感兴趣的是可视化包中的函数以及它们之间的依赖关系。有像miniCRAN这样的工具来绘制包依赖关系,但是对于包中的函数依赖关系图有什么可用的吗?

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

代码语言:javascript
复制
func1 <- function(n) return(LETTERS[n])
func2 <- function(n) return(func1(n%%26+1))

然后,我只想要一个有两个标记节点和一个连接它们的边的图,描述func2func1的依赖性。

我认为有很多包具有非常多的功能依赖关系,这样的实用程序可以帮助理解/组织/重构/等等。

谢谢。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2017-07-10 15:36:37

我认为一个更好的选择(构建在mvbutil的foodweb功能之上)是由datastorm构建的DependenciesGraph包--在其更通用的visNetwork包的基础上打开数据。

在我的例子中,我一直在为维护和开发可视化我自己的软件包,并且对结果非常满意。

代码语言:javascript
复制
library(DependenciesGraph)
library(QualtricsTools) # A package I'm developing
deps <- funDependencies("package:QualtricsTools", "generate_split_coded_comments")
plot(deps)

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

与mvbutil食品网的比较:

代码语言:javascript
复制
library(mvbutils)
library(QualtricsTools) 
deps <- foodweb(where="package:QualtricsTools", prune='make_split_coded_comments')
plot(deps)

(不好意思,名字上有差异,它们真的是同一个函数,我只是碰巧重命名了这两个情节之间的函数)。

票数 24
EN

Stack Overflow用户

发布于 2017-05-23 19:31:35

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

代码语言:javascript
复制
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下面的示例。

票数 9
EN

Stack Overflow用户

发布于 2021-05-31 23:01:35

为了完整,并且作为一个无耻的插件,我正在开发另一个包来解决这个问题:foodwebrDependenciesGraphs包似乎已经几年没有更新了,我发现mvbutils::foodweb()的输出很难解析。这三个包都在引擎盖下使用相同的依赖检测算法。

使用原始示例:

代码语言:javascript
复制
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() }
#> }

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

代码语言:javascript
复制
plot(fw)

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

代码语言:javascript
复制
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

这个包还在开发中,但是您可以使用devtools::install_github("lewinfox/foodwebr")来尝试一下。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44143110

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档