闪亮的节点反应性依赖树

时间:2017-04-27 12:43:23

标签: r shiny reactive-programming

我已经开始维护一个大约3000个代码行的Rshiny包。我想概述一下触发server.R文件中的内容。

是否有机会以简洁的方式生成反应性触发依赖图?

3 个答案:

答案 0 :(得分:6)

这可能对你很有意思:https://www.r-bloggers.com/announcing-shinytester-a-package-that-helps-you-build-shiny-apps/

它引入了一个名为shinyTester的库 ShinyHierarchy()。 有关该文章的示例,请参见下图。 enter image description here

答案 1 :(得分:5)

有一个闪亮的"反应式日志可视化器"内置有光泽。它以递增方式构建图形,显示各种反应节点如何相互依赖。运行后的输出如下所示:

enter image description here

有关使用此工具的说明,请访问:Reactive Log Visualizer

以下是关于此工具的说明:

  • 启用在光线调用
  • 之前插入的行options(shiny.reactlog = TRUE)
  • 它会记录日志如何相互激活的日志。
  • 然后可以使用Ctrl-F3(或Apple上的Command-F3)启用日志可视化工具
  • 可以手动覆盖节点布局。当显示许多节点以防止线路相互交叉时,这可能具有挑战性。
  • 然后,您可以使用箭头键在日志中向前移动(基本上您在日志中移动)。
  • 此处解释了反应符号:Shiny Reactivity Overview
  • 它暴露了许多对用户不可见的反应活动,因此可能会造成混淆。
  • 它在大型Shiny应用程序上效果不佳 - 此工具的许多方面根本无法扩展。

答案 2 :(得分:5)

反应式日志可视化工具是一个功能强大的工具,但遗憾的是,随着@Mike Wise指出,大型应用程序无法很好地扩展。前段时间我在rstudio/shiny#1846rstudio/shiny#1532中阅读了一些改进调试体验的有趣想法,并开始探索实现它们的方法。

在这里和那里(summary)磕磕绊绊之后,我发现执行此操作的最佳方法是解析原始反应日志并从中构建依赖关系图。

https://github.com/glin/reactlog的套餐。两个主要特征是:

显示触发失效的调用堆栈

observe({
  reactlog::traceInvalidation()
  rx()
})
4: observe({
       reactlog::traceInvalidation()
       rx()
   })
3: rx [<text>#7]
2: val =>  num 10
1: observe(val(10))

并在树视图中列出反应依赖项

observe({
  reactlog::listDependencies()
  rxA() + rxB() + rxAB()
}, label = "obs")
obs*
+-- rxA*
| `-- valA*
+-- rxB
| `-- valB
`-- rxAB*
  +-- valA*
  `-- valB

树视图可能对查看多个依赖项是否无效(星号表示失效或更改)特别有用。