【问题标题】:Knit function that returns dot (graphviz) code as string将点(graphviz)代码作为字符串返回的编织函数
【发布时间】:2023-03-20 21:30:01
【问题描述】:

在带有 engine = "dot" 的 knitr 块中使用纯点很简单,但您必须自己编写点代码。

<<r dot-ex,  engine = "dot",  echo=FALSE>>=
digraph test123 { 
          A -> B
}
@

我想要一个函数来为我做这件事。

dotFun <- function() {
  dotCode <- 'digraph test123 { 
          A -> B
          }'
  return(dotCode)
}

然后在 knit 块中调用它,类似于返回 LaTeX 代码的函数并使用 result = 'as.is' 进行 knit

<<r dot-ex,  engine = "dot">>=
cat(dotFun())
@

但这会导致:(knit_engines$get(options$engine))(options) 中的错误: 设置块选项 results = 'asis' 会产生相同的错误消息。

有没有办法做到这一点?

【问题讨论】:

    标签: r graphviz knitr dot


    【解决方案1】:

    当前版本的 knitr (v1.5) 无法实现,但在尚未发布的下一个版本 (v1.6) 中可以实现。如果您使用development version on Github,您实际上可以通过code 选项将源代码分配给代码块,例如

    <<dot-ex,  engine = "dot", code = dotFun()>>=
    @
    

    更多信息请关注news for v1.6

    【讨论】:

    • 易辉好消息。非常感谢您与 Knitr 的出色合作。
    【解决方案2】:

    有什么特殊原因必须使用该引擎在 knitr 块中进行评估?为什么不通过一些系统调用直接从 R 中执行呢?您可以将命令写入文件,然后使用system 在该文件上调用dot,并将结果读回R。

    事实上,knitr 就是这样做的。您可能很容易使用 knitr dot 引擎并将其包装到您自己的函数中——请参阅 https://github.com/yihui/knitr/blob/master/R/engine.R#L144.

    【讨论】:

    • 我正在使用这种方法在 r 函数中创建表和列表,然后通过 results = "as.is" 输出它们。这感觉是最简单的方法。我尝试遵循 Yihui 的源代码,但我的 r-coding 技能似乎缺乏。你知道这样做的任何其他例子吗? IE。运行外部命令并将生成的 pdf 作为图形插入到 LaTeX 代码中以进行进一步编织。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-26
    • 2012-03-27
    • 1970-01-01
    相关资源
    最近更新 更多