我有一个RMarkdown文档,我在其中使用data.tree
和DiagrammeR
来生成模型。然后,我使用类似于如何在Rmarkdown文件中包含DiagrammeR/mermaid流程图中使用的设置来显示这些
例如:
```{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");
```
目前为止,一切都好。将添加标题文本,这是您所期望的。
除了 :-)
上面,在"设置"针织块中,我使用了userfriendlyscience
中的setFigCapNumbering
(见 https://github.com/Matherion/userfriendlyscience/blob/master/R/setFigCapNumbering.R)。此函数使用knit_hooks$set
为绘图设置挂钩,以便自动对标题进行编号。
但此编号不会应用于DiagrammeR
输出。
我想这是有道理的,因为它实际上不是一个情节,而是一个 HTML 小部件或一些 SVG 左右。不过,我仍然希望它被编号为一个数字。
但是,如何找出生成输出时knitr
调用DiagrammeR
钩子呢?
我总是可以使用更通用的"自动字幕"函数setCaptionNumbering
(https://github.com/Matherion/userfriendlyscience/blob/master/R/setCaptionNumbering.R),并告诉它使用与图形标题相同的计数器选项。这将回避这个问题,但我更愿意修改适当的knitr
钩子。
由于这个问题(弄清楚knitr
使用哪个钩子来生成给定函数生成的输出)可能会更频繁地发生,我认为值得提出一个 SA 问题。
有谁知道你怎么能找到这个?
knitr
对给定块生成的输出进行knit_print
调用。然后,这将根据输出的类调用相应的方法。您可以通过运行methods("knit_print")
来找出可用的方法,然后查看其中是否有任何方法与 DiagrammeR 的输出类匹配。
看看你的例子,我猜你的输出的类是"DiagrammeR" "htmlwidget"
,所以 knitr 调用knit_print.htmlwidget
。
深入研究该源代码,它调用htmltools::knit_print.html
,它包装标签,然后输出asis。因此,为了回答您的问题,它使用默认钩子以您使用的任何输出格式进行 asis 输出。