在 rmarkdown 中呈现 DiagrammeR 图形时会调用哪些 knitr 挂钩?

Which knitr hooks are invoked when a DiagrammeR graph is rendered in rmarkdown?

我有一个 RMarkdown 文档,我在其中使用 data.treeDiagrammeR 生成模型。然后我使用类似于

中使用的 set-up 显示这些

例如:

```{r fig.cap="Structureel model bij enkelvoudige regressie.", fig.with=4, fig.height=1}

drawStructuralModel <- function(covariates, criterion) {
  ### Create tree
  res <- Node$new(criterion);
  for (covariate in covariates) {
    res$AddChild(covariate);
  }
  ### Set display settings
  SetEdgeStyle(res, dir='back');
  res <- ToDiagrammeRGraph(res, direction = "descend");
  res <- add_global_graph_attrs(res, "layout", "dot", "graph");
  res <- add_global_graph_attrs(res, "rankdir", "RL", "graph");

  ### Draw and return tree
  render_graph(res);
}

drawStructuralModel("X", "Y");

```

到目前为止一切顺利。添加了标题文本,这是您所期望的。

除了 :-)

上面,在 'setup' knitr 块中,我使用了 userfriendlyscience 中的 setFigCapNumbering(参见 https://github.com/Matherion/userfriendlyscience/blob/master/R/setFigCapNumbering.R)。此函数使用 knit_hooks$set 为绘图设置一个挂钩,以便标题自动编号。

但此编号不适用于 DiagrammeR 输出。

我想这是有道理的,因为它实际上不是一个情节,而是一个 HTML 小部件或一些 SVG 之类的东西。不过,我仍然喜欢它被编号为一个数字。

但是当生成 DiagrammeR 输出时,我如何找出调用哪个钩子 knitr

我总是可以求助于使用更通用的 'automatic caption' 函数 setCaptionNumbering (https://github.com/Matherion/userfriendlyscience/blob/master/R/setCaptionNumbering.R),并告诉它使用与图形标题相同的计数器选项。这会回避这个问题,但我更愿意修改适当的 knitr 挂钩。

而且由于这个问题(找出哪个钩子 knitr 用于给定函数产生的输出)可能更频繁地发生,我认为值得提出一个 SA 问题。

有人知道如何找到这个吗?

knitr 对给定块生成的输出调用 knit_print。然后根据输出的 class 调用适当的方法。您可以通过 运行 methods("knit_print") 找出可用的方法,然后查看是否有任何方法与 DiagrammeR 输出的 class 相匹配。

看你的例子,我猜你输出的 class 是 "DiagrammeR" "htmlwidget",所以 knitr 正在调用 knit_print.htmlwidget

深入研究该源代码,它调用 htmltools::knit_print.html,包装标签,然后输出 asis。因此,为了回答您的问题,无论您使用何种输出格式,它都使用默认挂钩进行 asis 输出。