在 rmarkdown 中呈现 DiagrammeR 图形时会调用哪些 knitr 挂钩?
Which knitr hooks are invoked when a DiagrammeR graph is rendered in rmarkdown?
我有一个 RMarkdown 文档,我在其中使用 data.tree
和 DiagrammeR
生成模型。然后我使用类似于
中使用的 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 输出。
我有一个 RMarkdown 文档,我在其中使用 data.tree
和 DiagrammeR
生成模型。然后我使用类似于
例如:
```{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 输出。