2

我通常编写具有多个功能的模块化脚本。当事情发展时,很难跟踪哪个函数调用了哪个(命名它们01-first.R 02-second.R并不总是可能的,我宁愿不将其用作最终解决方案)。

这是一个潜在的示例,script.R它可以使用助手运行 3 个“主要”功能。

first <- function(...){
  # do data things
  return(first_output)
}

second <- function(first_output){
  # do data things
  # call helper
  x <- helper(...)
  # do things to x
  return(second_output)
}

third <- function(second_output){
  # do data things
  return(result)
}

我很想得到这样的东西

在此处输入图像描述

可以使用diagrammeR包在 R 中生成。

grViz("
digraph boxes_and_circles {

  # a 'graph' statement
  graph [overlap = true, fontsize = 10]

  # several 'node' statements
  node [shape = box,
        fontname = Helvetica]
  first; second; helper; third;

  # several 'edge' statements
  first->second second->helper 
  helper -> second
  second->third 
  third -> result
}
")

就是这样(什么函数调用其他函数)会很棒。真正令人敬畏的是一种根据参数显示分叉类型的方法(例如,默认情况下first有 a但如果它直接跳转到)。拥有函数正在处理的对象类也很棒。go_to_third=FALSEgo_to_third=TRUEthird


我已经检查了这个问题Visualizing R Function Dependencies 并且我想知道是否有更好的方法来做到这一点,视觉上更好。


这个问题类似于 MATLAB 中的这个问题Automatically generate a diagram of function calls in MATLAB,我可以使用 R 外部的 GraphViz 进行破解。

4

1 回答 1

1

不完全是你所追求的,但我一直在研究一个图书馆来对 dplyr 管道进行签证:

https://github.com/terminological/dtrackr

它可以或多或少地做你想要的,但在更细粒度的水平上。我将不胜感激任何反馈,因为仍然是实验性的。

于 2021-02-26T13:35:22.523 回答